summaryrefslogtreecommitdiffstats
path: root/mojo
diff options
context:
space:
mode:
authordavemoore <davemoore@chromium.org>2015-02-26 18:17:20 -0800
committerCommit bot <commit-bot@chromium.org>2015-02-27 02:18:05 +0000
commit17e1d8001e4f4a4695b0d2645cc1e6fae896ad0e (patch)
tree2a271c8de5fb78a5efd009edbfc90f877b44d5d3 /mojo
parente2fd577ce00da89ae999efe23b5b075afa4b64c9 (diff)
downloadchromium_src-17e1d8001e4f4a4695b0d2645cc1e6fae896ad0e.zip
chromium_src-17e1d8001e4f4a4695b0d2645cc1e6fae896ad0e.tar.gz
chromium_src-17e1d8001e4f4a4695b0d2645cc1e6fae896ad0e.tar.bz2
Add never-visible option to html_viewer
BUG= Review URL: https://codereview.chromium.org/874663004 Cr-Commit-Position: refs/heads/master@{#318378}
Diffstat (limited to 'mojo')
-rw-r--r--mojo/services/html_viewer/html_document.cc13
-rw-r--r--mojo/services/html_viewer/html_document.h6
-rw-r--r--mojo/services/html_viewer/html_viewer.cc44
-rw-r--r--mojo/services/html_viewer/weblayertreeview_impl.cc14
4 files changed, 52 insertions, 25 deletions
diff --git a/mojo/services/html_viewer/html_document.cc b/mojo/services/html_viewer/html_document.cc
index c85ed07..150a8e1 100644
--- a/mojo/services/html_viewer/html_document.cc
+++ b/mojo/services/html_viewer/html_document.cc
@@ -102,14 +102,16 @@ HTMLDocument::HTMLDocument(
URLResponsePtr response,
mojo::Shell* shell,
scoped_refptr<base::MessageLoopProxy> compositor_thread,
- WebMediaPlayerFactory* web_media_player_factory)
+ WebMediaPlayerFactory* web_media_player_factory,
+ bool is_headless)
: response_(response.Pass()),
shell_(shell),
web_view_(nullptr),
root_(nullptr),
view_manager_client_factory_(shell_, this),
compositor_thread_(compositor_thread),
- web_media_player_factory_(web_media_player_factory) {
+ web_media_player_factory_(web_media_player_factory),
+ is_headless_(is_headless) {
exported_services_.AddService(this);
exported_services_.AddService(&view_manager_client_factory_);
exported_services_.Bind(services.Pass());
@@ -129,6 +131,7 @@ void HTMLDocument::OnEmbed(
View* root,
mojo::InterfaceRequest<mojo::ServiceProvider> services,
mojo::ServiceProviderPtr exposed_services) {
+ DCHECK(!is_headless_);
root_ = root;
embedder_service_provider_ = exposed_services.Pass();
navigator_host_.set_service_provider(embedder_service_provider_.get());
@@ -176,6 +179,12 @@ blink::WebStorageNamespace* HTMLDocument::createSessionStorageNamespace() {
}
void HTMLDocument::initializeLayerTreeView() {
+ if (is_headless_) {
+ web_layer_tree_view_impl_.reset(
+ new WebLayerTreeViewImpl(compositor_thread_, nullptr, nullptr));
+ return;
+ }
+
ServiceProviderPtr surfaces_service_provider;
shell_->ConnectToApplication("mojo:surfaces_service",
GetProxy(&surfaces_service_provider), nullptr);
diff --git a/mojo/services/html_viewer/html_document.h b/mojo/services/html_viewer/html_document.h
index f5b439e..38fcd71 100644
--- a/mojo/services/html_viewer/html_document.h
+++ b/mojo/services/html_viewer/html_document.h
@@ -64,7 +64,8 @@ class HTMLDocument : public blink::WebViewClient,
mojo::URLResponsePtr response,
mojo::Shell* shell,
scoped_refptr<base::MessageLoopProxy> compositor_thread,
- WebMediaPlayerFactory* web_media_player_factory);
+ WebMediaPlayerFactory* web_media_player_factory,
+ bool is_headless);
virtual ~HTMLDocument();
private:
@@ -145,6 +146,9 @@ class HTMLDocument : public blink::WebViewClient,
// HTMLDocument owns these pointers.
std::set<AxProviderImpl*> ax_provider_impls_;
+ // Set if the content will never be displayed.
+ bool is_headless_;
+
DISALLOW_COPY_AND_ASSIGN(HTMLDocument);
};
diff --git a/mojo/services/html_viewer/html_viewer.cc b/mojo/services/html_viewer/html_viewer.cc
index 02c290a..1278a24 100644
--- a/mojo/services/html_viewer/html_viewer.cc
+++ b/mojo/services/html_viewer/html_viewer.cc
@@ -56,6 +56,9 @@ const char kEnableMojoMediaRenderer[] = "enable-mojo-media-renderer";
// Disables support for (unprefixed) Encrypted Media Extensions.
const char kDisableEncryptedMedia[] = "disable-encrypted-media";
+// Prevents creation of any output surface.
+const char kIsHeadless[] = "is-headless";
+
class HTMLViewer;
class HTMLViewerApplication : public mojo::Application {
@@ -63,12 +66,14 @@ class HTMLViewerApplication : public mojo::Application {
HTMLViewerApplication(InterfaceRequest<Application> request,
URLResponsePtr response,
scoped_refptr<base::MessageLoopProxy> compositor_thread,
- WebMediaPlayerFactory* web_media_player_factory)
+ WebMediaPlayerFactory* web_media_player_factory,
+ bool is_headless)
: url_(response->url),
binding_(this, request.Pass()),
initial_response_(response.Pass()),
compositor_thread_(compositor_thread),
- web_media_player_factory_(web_media_player_factory) {}
+ web_media_player_factory_(web_media_player_factory),
+ is_headless_(is_headless) {}
void Initialize(ShellPtr shell, Array<String> args) override {
ServiceProviderPtr service_provider;
@@ -110,7 +115,8 @@ class HTMLViewerApplication : public mojo::Application {
InterfaceRequest<ServiceProvider> services,
URLResponsePtr response) {
new HTMLDocument(services.Pass(), response.Pass(), shell_.get(),
- compositor_thread_, web_media_player_factory_);
+ compositor_thread_, web_media_player_factory_,
+ is_headless_);
}
String url_;
@@ -120,28 +126,31 @@ class HTMLViewerApplication : public mojo::Application {
URLResponsePtr initial_response_;
scoped_refptr<base::MessageLoopProxy> compositor_thread_;
WebMediaPlayerFactory* web_media_player_factory_;
+ bool is_headless_;
};
class ContentHandlerImpl : public mojo::InterfaceImpl<ContentHandler> {
public:
ContentHandlerImpl(scoped_refptr<base::MessageLoopProxy> compositor_thread,
- WebMediaPlayerFactory* web_media_player_factory)
+ WebMediaPlayerFactory* web_media_player_factory,
+ bool is_headless)
: compositor_thread_(compositor_thread),
- web_media_player_factory_(web_media_player_factory) {}
+ web_media_player_factory_(web_media_player_factory),
+ is_headless_(is_headless) {}
~ContentHandlerImpl() override {}
private:
// Overridden from ContentHandler:
void StartApplication(InterfaceRequest<mojo::Application> request,
URLResponsePtr response) override {
- new HTMLViewerApplication(request.Pass(),
- response.Pass(),
- compositor_thread_,
- web_media_player_factory_);
+ new HTMLViewerApplication(request.Pass(), response.Pass(),
+ compositor_thread_, web_media_player_factory_,
+ is_headless_);
}
scoped_refptr<base::MessageLoopProxy> compositor_thread_;
WebMediaPlayerFactory* web_media_player_factory_;
+ bool is_headless_;
DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl);
};
@@ -161,16 +170,10 @@ class HTMLViewer : public mojo::ApplicationDelegate,
gin::IsolateHolder::LoadV8Snapshot();
#endif
blink::initialize(blink_platform_.get());
-#if !defined(COMPONENT_BUILD)
base::i18n::InitializeICU();
ui::RegisterPathProvider();
- base::FilePath ui_test_pak_path;
- CHECK(PathService::Get(ui::UI_TEST_PAK, &ui_test_pak_path));
- ui::ResourceBundle::InitSharedInstanceWithPakPath(ui_test_pak_path);
-#endif
-
base::CommandLine::StringVector command_line_args;
#if defined(OS_WIN)
for (const auto& arg : app->args())
@@ -194,6 +197,13 @@ class HTMLViewer : public mojo::ApplicationDelegate,
if (command_line->HasSwitch(kDisableEncryptedMedia))
blink::WebRuntimeFeatures::enableEncryptedMedia(false);
+ is_headless_ = command_line->HasSwitch(kIsHeadless);
+ if (!is_headless_) {
+ base::FilePath ui_test_pak_path;
+ CHECK(PathService::Get(ui::UI_TEST_PAK, &ui_test_pak_path));
+ ui::ResourceBundle::InitSharedInstanceWithPakPath(ui_test_pak_path);
+ }
+
compositor_thread_.Start();
web_media_player_factory_.reset(new WebMediaPlayerFactory(
compositor_thread_.message_loop_proxy(), enable_mojo_media_renderer));
@@ -209,13 +219,15 @@ class HTMLViewer : public mojo::ApplicationDelegate,
mojo::InterfaceRequest<ContentHandler> request) override {
BindToRequest(
new ContentHandlerImpl(compositor_thread_.message_loop_proxy(),
- web_media_player_factory_.get()),
+ web_media_player_factory_.get(), is_headless_),
&request);
}
scoped_ptr<MojoBlinkPlatformImpl> blink_platform_;
base::Thread compositor_thread_;
scoped_ptr<WebMediaPlayerFactory> web_media_player_factory_;
+ // Set if the content will never be displayed.
+ bool is_headless_;
DISALLOW_COPY_AND_ASSIGN(HTMLViewer);
};
diff --git a/mojo/services/html_viewer/weblayertreeview_impl.cc b/mojo/services/html_viewer/weblayertreeview_impl.cc
index e806d10..5769982 100644
--- a/mojo/services/html_viewer/weblayertreeview_impl.cc
+++ b/mojo/services/html_viewer/weblayertreeview_impl.cc
@@ -47,12 +47,14 @@ WebLayerTreeViewImpl::WebLayerTreeViewImpl(
nullptr);
DCHECK(layer_tree_host_);
- mojo::CommandBufferPtr cb;
- gpu_service->CreateOffscreenGLES2Context(GetProxy(&cb));
- scoped_refptr<cc::ContextProvider> context_provider(
- new mojo::ContextProviderMojo(cb.PassMessagePipe()));
- output_surface_.reset(
- new mojo::OutputSurfaceMojo(this, context_provider, surface.Pass()));
+ if (surface && gpu_service) {
+ mojo::CommandBufferPtr cb;
+ gpu_service->CreateOffscreenGLES2Context(GetProxy(&cb));
+ scoped_refptr<cc::ContextProvider> context_provider(
+ new mojo::ContextProviderMojo(cb.PassMessagePipe()));
+ output_surface_.reset(
+ new mojo::OutputSurfaceMojo(this, context_provider, surface.Pass()));
+ }
layer_tree_host_->SetLayerTreeHostClientReady();
}