Index: mojo/services/html_viewer/html_viewer.cc |
diff --git a/mojo/services/html_viewer/html_viewer.cc b/mojo/services/html_viewer/html_viewer.cc |
deleted file mode 100644 |
index 3e6f6269152033367503b62331d70cf1443b980b..0000000000000000000000000000000000000000 |
--- a/mojo/services/html_viewer/html_viewer.cc |
+++ /dev/null |
@@ -1,254 +0,0 @@ |
-// Copyright 2014 The Chromium Authors. All rights reserved. |
-// Use of this source code is governed by a BSD-style license that can be |
-// found in the LICENSE file. |
- |
-#include "base/command_line.h" |
-#include "base/i18n/icu_util.h" |
-#include "base/logging.h" |
-#include "base/macros.h" |
-#include "base/message_loop/message_loop.h" |
-#include "base/path_service.h" |
-#include "base/strings/utf_string_conversions.h" |
-#include "base/threading/thread.h" |
-#include "gin/v8_initializer.h" |
-#include "mojo/application/application_runner_chromium.h" |
-#include "mojo/services/html_viewer/blink_platform_impl.h" |
-#include "mojo/services/html_viewer/discardable_memory_allocator.h" |
-#include "mojo/services/html_viewer/html_document.h" |
-#include "mojo/services/html_viewer/web_media_player_factory.h" |
-#include "mojo/services/network/public/interfaces/network_service.mojom.h" |
-#include "third_party/WebKit/public/web/WebKit.h" |
-#include "third_party/WebKit/public/web/WebRuntimeFeatures.h" |
-#include "third_party/mojo/src/mojo/public/c/system/main.h" |
-#include "third_party/mojo/src/mojo/public/cpp/application/application_connection.h" |
-#include "third_party/mojo/src/mojo/public/cpp/application/application_delegate.h" |
-#include "third_party/mojo/src/mojo/public/cpp/application/application_impl.h" |
-#include "third_party/mojo/src/mojo/public/cpp/application/connect.h" |
-#include "third_party/mojo/src/mojo/public/cpp/application/interface_factory_impl.h" |
-#include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h" |
-#include "third_party/mojo_services/src/content_handler/public/interfaces/content_handler.mojom.h" |
-#include "ui/base/resource/resource_bundle.h" |
-#include "ui/base/ui_base_paths.h" |
- |
-using mojo::ApplicationConnection; |
-using mojo::Array; |
-using mojo::BindToRequest; |
-using mojo::ContentHandler; |
-using mojo::InterfaceRequest; |
-using mojo::ServiceProvider; |
-using mojo::ServiceProviderPtr; |
-using mojo::ShellPtr; |
-using mojo::String; |
-using mojo::URLLoaderPtr; |
-using mojo::URLResponsePtr; |
- |
-namespace html_viewer { |
- |
-// Switches for html_viewer. |
- |
-// Enable MediaRenderer in media pipeline instead of using the internal |
-// media::Renderer implementation. |
-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"; |
- |
-size_t kDesiredMaxMemory = 20 * 1024 * 1024; |
- |
-class HTMLViewer; |
- |
-class HTMLViewerApplication : public mojo::Application { |
- public: |
- HTMLViewerApplication(InterfaceRequest<Application> request, |
- URLResponsePtr response, |
- scoped_refptr<base::MessageLoopProxy> compositor_thread, |
- 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), |
- is_headless_(is_headless) {} |
- |
- void Initialize(ShellPtr shell, |
- Array<String> args, |
- const String& url) override { |
- ServiceProviderPtr service_provider; |
- shell_ = shell.Pass(); |
- shell_->ConnectToApplication("mojo:network_service", |
- GetProxy(&service_provider), nullptr); |
- ConnectToService(service_provider.get(), &network_service_); |
- } |
- |
- void AcceptConnection(const String& requestor_url, |
- InterfaceRequest<ServiceProvider> services, |
- ServiceProviderPtr exposed_services, |
- const String& url) override { |
- if (initial_response_) { |
- OnResponseReceived(URLLoaderPtr(), services.Pass(), |
- initial_response_.Pass()); |
- } else { |
- URLLoaderPtr loader; |
- network_service_->CreateURLLoader(GetProxy(&loader)); |
- mojo::URLRequestPtr request(mojo::URLRequest::New()); |
- request->url = url_; |
- request->auto_follow_redirects = true; |
- |
- // |loader| will be pass to the OnResponseReceived method through a |
- // callback. Because order of evaluation is undefined, a reference to the |
- // raw pointer is needed. |
- mojo::URLLoader* raw_loader = loader.get(); |
- raw_loader->Start( |
- request.Pass(), |
- base::Bind(&HTMLViewerApplication::OnResponseReceived, |
- base::Unretained(this), base::Passed(&loader), |
- base::Passed(&services))); |
- } |
- } |
- |
- void RequestQuit() override {} |
- |
- private: |
- void OnResponseReceived(URLLoaderPtr loader, |
- InterfaceRequest<ServiceProvider> services, |
- URLResponsePtr response) { |
- new HTMLDocument(services.Pass(), response.Pass(), shell_.get(), |
- compositor_thread_, web_media_player_factory_, |
- is_headless_); |
- } |
- |
- String url_; |
- mojo::StrongBinding<mojo::Application> binding_; |
- ShellPtr shell_; |
- mojo::NetworkServicePtr network_service_; |
- 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, |
- bool is_headless) |
- : compositor_thread_(compositor_thread), |
- 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_, |
- is_headless_); |
- } |
- |
- scoped_refptr<base::MessageLoopProxy> compositor_thread_; |
- WebMediaPlayerFactory* web_media_player_factory_; |
- bool is_headless_; |
- |
- DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl); |
-}; |
- |
-class HTMLViewer : public mojo::ApplicationDelegate, |
- public mojo::InterfaceFactory<ContentHandler> { |
- public: |
- HTMLViewer() |
- : discardable_memory_allocator_(kDesiredMaxMemory), |
- compositor_thread_("compositor thread") {} |
- |
- ~HTMLViewer() override { blink::shutdown(); } |
- |
- private: |
- // Overridden from ApplicationDelegate: |
- void Initialize(mojo::ApplicationImpl* app) override { |
- base::DiscardableMemoryAllocator::SetInstance( |
- &discardable_memory_allocator_); |
- |
- blink_platform_.reset(new BlinkPlatformImpl(app)); |
-#if defined(V8_USE_EXTERNAL_STARTUP_DATA) |
- // Note: this requires file system access. |
- gin::V8Initializer::LoadV8Snapshot(); |
-#endif |
- blink::initialize(blink_platform_.get()); |
- base::i18n::InitializeICU(); |
- |
- ui::RegisterPathProvider(); |
- |
- base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
- |
- logging::LoggingSettings settings; |
- settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; |
- logging::InitLogging(settings); |
- // Display process ID, thread ID and timestamp in logs. |
- logging::SetLogItems(true, true, true, false); |
- |
- if (command_line->HasSwitch(kDisableEncryptedMedia)) |
- blink::WebRuntimeFeatures::enableEncryptedMedia(false); |
- |
- is_headless_ = command_line->HasSwitch(kIsHeadless); |
- if (!is_headless_) { |
- // TODO(sky): consider putting this into the .so so that we don't need |
- // file system access. |
- 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(); |
-#if defined(OS_ANDROID) |
- // TODO(sky): Get WebMediaPlayerFactory working on android. |
- NOTIMPLEMENTED(); |
-#else |
- bool enable_mojo_media_renderer = |
- command_line->HasSwitch(kEnableMojoMediaRenderer); |
- |
- web_media_player_factory_.reset(new WebMediaPlayerFactory( |
- compositor_thread_.message_loop_proxy(), enable_mojo_media_renderer)); |
-#endif |
- } |
- |
- bool ConfigureIncomingConnection(ApplicationConnection* connection) override { |
- connection->AddService(this); |
- return true; |
- } |
- |
- // Overridden from InterfaceFactory<ContentHandler> |
- void Create(ApplicationConnection* connection, |
- mojo::InterfaceRequest<ContentHandler> request) override { |
- BindToRequest( |
- new ContentHandlerImpl(compositor_thread_.message_loop_proxy(), |
- web_media_player_factory_.get(), is_headless_), |
- &request); |
- } |
- |
- // Skia requires that we have one of these. Unlike the one used in chrome, |
- // this doesn't use purgable shared memory. Instead, it tries to free the |
- // oldest unlocked chunks on allocation. |
- // |
- // TODO(erg): In the long run, delete this allocator and get the real shared |
- // memory based purging allocator working here. |
- DiscardableMemoryAllocator discardable_memory_allocator_; |
- |
- scoped_ptr<BlinkPlatformImpl> 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); |
-}; |
- |
-} // namespace html_viewer |
- |
-MojoResult MojoMain(MojoHandle shell_handle) { |
- mojo::ApplicationRunnerChromium runner(new html_viewer::HTMLViewer); |
- return runner.Run(shell_handle); |
-} |