diff options
author | davemoore <davemoore@chromium.org> | 2015-02-26 18:17:20 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-02-27 02:18:05 +0000 |
commit | 17e1d8001e4f4a4695b0d2645cc1e6fae896ad0e (patch) | |
tree | 2a271c8de5fb78a5efd009edbfc90f877b44d5d3 /mojo | |
parent | e2fd577ce00da89ae999efe23b5b075afa4b64c9 (diff) | |
download | chromium_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.cc | 13 | ||||
-rw-r--r-- | mojo/services/html_viewer/html_document.h | 6 | ||||
-rw-r--r-- | mojo/services/html_viewer/html_viewer.cc | 44 | ||||
-rw-r--r-- | mojo/services/html_viewer/weblayertreeview_impl.cc | 14 |
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(); } |