Commit 0565a2f5 authored by Jiawei Li's avatar Jiawei Li Committed by Commit Bot

[chromecast] Host QueryableDataHost in CastWebContents

CastWebContents now provides a getter to access QueryableDataHost. If
InitParams::provide_queryable_data_host is set false, the getter will
return a nullptr (for non Cast application page).

Merge-With: eureka-internal/342948

Bug: internal b/144316072
Test: CQ
Change-Id: I44a2aefbed9fcdcf5481423d073ffc42a8ee358d
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1956252Reviewed-by: default avatarYuchen Liu <yucliu@chromium.org>
Reviewed-by: default avatarSean Topping <seantopping@chromium.org>
Commit-Queue: Jiawei Li <lijiawei@chromium.org>
Cr-Commit-Position: refs/heads/master@{#722720}
parent 07842c81
......@@ -30,6 +30,8 @@ class WebContents;
namespace chromecast {
class QueryableDataHost;
struct RendererFeature {
const std::string name;
base::Value value;
......@@ -210,6 +212,10 @@ class CastWebContents {
bool enable_websql = false;
// Enable mixer audio support for this CastWebContents.
bool enable_mixer_audio = false;
// Whether to provide a QueryableDataHost for this CastWebContents.
// Clients can use it to send queryable values to the render frames.
// queryable_data_host() will return a nullptr if this is false.
bool enable_queryable_data_host = false;
InitParams();
InitParams(const InitParams& other);
......@@ -244,6 +250,10 @@ class CastWebContents {
virtual content::WebContents* web_contents() const = 0;
virtual PageState page_state() const = 0;
// Returns QueryableDataHost that is used to push values to the renderer.
// Returns nullptr if the new queryable data bindings is enabled.
virtual QueryableDataHost* queryable_data_host() const = 0;
// ===========================================================================
// Initialization and Setup
// ===========================================================================
......
......@@ -13,10 +13,13 @@
#include "base/strings/utf_string_conversions.h"
#include "base/threading/sequenced_task_runner_handle.h"
#include "base/values.h"
#include "chromecast/activity/queryable_data_host.h"
#include "chromecast/base/cast_features.h"
#include "chromecast/base/chromecast_switches.h"
#include "chromecast/base/metrics/cast_metrics_helper.h"
#include "chromecast/browser/cast_browser_process.h"
#include "chromecast/browser/devtools/remote_debugging_server.h"
#include "chromecast/browser/queryable_data_host_cast.h"
#include "chromecast/common/mojom/media_playback_options.mojom.h"
#include "chromecast/common/mojom/on_load_script_injector.mojom.h"
#include "chromecast/common/mojom/queryable_data_store.mojom.h"
......@@ -139,6 +142,13 @@ CastWebContentsImpl::CastWebContentsImpl(content::WebContents* web_contents,
if (GetSwitchValueBoolean(switches::kDisableMojoRenderer, false)) {
use_cma_renderer_ = false;
}
// Provides QueryableDataHostCast if the new QueryableData bindings is not
// enabled.
if (init_params.enable_queryable_data_host) {
queryable_data_host_ =
std::make_unique<QueryableDataHostCast>(web_contents_);
}
}
CastWebContentsImpl::~CastWebContentsImpl() {
......@@ -167,6 +177,10 @@ CastWebContents::PageState CastWebContentsImpl::page_state() const {
return page_state_;
}
QueryableDataHost* CastWebContentsImpl::queryable_data_host() const {
return queryable_data_host_.get();
}
void CastWebContentsImpl::AddRendererFeatures(
std::vector<RendererFeature> features) {
for (auto& feature : features) {
......
......@@ -29,6 +29,8 @@
namespace chromecast {
class QueryableDataHost;
namespace shell {
class RemoteDebuggingServer;
} // namespace shell
......@@ -43,6 +45,8 @@ class CastWebContentsImpl : public CastWebContents,
content::WebContents* web_contents() const override;
PageState page_state() const override;
QueryableDataHost* queryable_data_host() const override;
// CastWebContents implementation:
int tab_id() const override;
void AddRendererFeatures(std::vector<RendererFeature> features) override;
......@@ -177,6 +181,8 @@ class CastWebContentsImpl : public CastWebContents,
base::flat_map<InterfaceSet, service_manager::InterfaceProvider*>
interface_providers_map_;
std::unique_ptr<QueryableDataHost> queryable_data_host_;
SEQUENCE_CHECKER(sequence_checker_);
base::WeakPtrFactory<CastWebContentsImpl> weak_factory_;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment