Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/command_line.h" | 5 #include "base/command_line.h" |
| 6 #include "base/i18n/icu_util.h" | 6 #include "base/i18n/icu_util.h" |
| 7 #include "base/logging.h" | 7 #include "base/logging.h" |
| 8 #include "base/macros.h" | 8 #include "base/macros.h" |
| 9 #include "base/message_loop/message_loop.h" | 9 #include "base/message_loop/message_loop.h" |
| 10 #include "base/path_service.h" | 10 #include "base/path_service.h" |
| 11 #include "base/strings/utf_string_conversions.h" | 11 #include "base/strings/utf_string_conversions.h" |
| 12 #include "base/threading/thread.h" | 12 #include "base/threading/thread.h" |
| 13 #include "components/html_viewer/blink_platform_impl.h" | 13 #include "components/html_viewer/blink_platform_impl.h" |
| 14 #include "components/html_viewer/discardable_memory_allocator.h" | 14 #include "components/html_viewer/discardable_memory_allocator.h" |
| 15 #include "components/html_viewer/html_document.h" | 15 #include "components/html_viewer/html_document.h" |
| 16 #include "components/html_viewer/web_media_player_factory.h" | 16 #include "components/html_viewer/web_media_player_factory.h" |
| 17 #include "components/resource_provider/public/cpp/resource_loader.h" | |
| 18 #include "components/resource_provider/public/interfaces/resource_provider.mojom .h" | |
| 17 #include "components/scheduler/renderer/renderer_scheduler.h" | 19 #include "components/scheduler/renderer/renderer_scheduler.h" |
| 18 #include "gin/v8_initializer.h" | 20 #include "gin/v8_initializer.h" |
| 19 #include "mojo/application/application_runner_chromium.h" | 21 #include "mojo/application/application_runner_chromium.h" |
| 22 #include "mojo/common/common_type_converters.h" | |
| 23 #include "mojo/platform_handle/platform_handle_functions.h" | |
| 20 #include "mojo/services/network/public/interfaces/network_service.mojom.h" | 24 #include "mojo/services/network/public/interfaces/network_service.mojom.h" |
| 21 #include "third_party/WebKit/public/web/WebKit.h" | 25 #include "third_party/WebKit/public/web/WebKit.h" |
| 22 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" | 26 #include "third_party/WebKit/public/web/WebRuntimeFeatures.h" |
| 23 #include "third_party/mojo/src/mojo/public/c/system/main.h" | 27 #include "third_party/mojo/src/mojo/public/c/system/main.h" |
| 24 #include "third_party/mojo/src/mojo/public/cpp/application/application_connectio n.h" | 28 #include "third_party/mojo/src/mojo/public/cpp/application/application_connectio n.h" |
| 25 #include "third_party/mojo/src/mojo/public/cpp/application/application_delegate. h" | 29 #include "third_party/mojo/src/mojo/public/cpp/application/application_delegate. h" |
| 26 #include "third_party/mojo/src/mojo/public/cpp/application/application_impl.h" | 30 #include "third_party/mojo/src/mojo/public/cpp/application/application_impl.h" |
| 27 #include "third_party/mojo/src/mojo/public/cpp/application/connect.h" | 31 #include "third_party/mojo/src/mojo/public/cpp/application/connect.h" |
| 28 #include "third_party/mojo/src/mojo/public/cpp/application/interface_factory_imp l.h" | 32 #include "third_party/mojo/src/mojo/public/cpp/application/interface_factory_imp l.h" |
| 29 #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h" | 33 #include "third_party/mojo/src/mojo/public/cpp/bindings/strong_binding.h" |
| (...skipping 11 matching lines...) Expand all Loading... | |
| 41 using mojo::Array; | 45 using mojo::Array; |
| 42 using mojo::BindToRequest; | 46 using mojo::BindToRequest; |
| 43 using mojo::ContentHandler; | 47 using mojo::ContentHandler; |
| 44 using mojo::InterfaceRequest; | 48 using mojo::InterfaceRequest; |
| 45 using mojo::ServiceProvider; | 49 using mojo::ServiceProvider; |
| 46 using mojo::ServiceProviderPtr; | 50 using mojo::ServiceProviderPtr; |
| 47 using mojo::ShellPtr; | 51 using mojo::ShellPtr; |
| 48 using mojo::String; | 52 using mojo::String; |
| 49 using mojo::URLLoaderPtr; | 53 using mojo::URLLoaderPtr; |
| 50 using mojo::URLResponsePtr; | 54 using mojo::URLResponsePtr; |
| 55 using resource_provider::ResourceLoader; | |
| 51 | 56 |
| 52 namespace html_viewer { | 57 namespace html_viewer { |
| 53 | 58 |
| 54 // Switches for html_viewer. | 59 // Switches for html_viewer. |
| 55 | 60 |
| 56 // Enable MediaRenderer in media pipeline instead of using the internal | 61 // Enable MediaRenderer in media pipeline instead of using the internal |
| 57 // media::Renderer implementation. | 62 // media::Renderer implementation. |
| 58 const char kEnableMojoMediaRenderer[] = "enable-mojo-media-renderer"; | 63 const char kEnableMojoMediaRenderer[] = "enable-mojo-media-renderer"; |
| 59 | 64 |
| 60 // Disables support for (unprefixed) Encrypted Media Extensions. | 65 // Disables support for (unprefixed) Encrypted Media Extensions. |
| (...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 162 bool is_headless_; | 167 bool is_headless_; |
| 163 | 168 |
| 164 DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl); | 169 DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl); |
| 165 }; | 170 }; |
| 166 | 171 |
| 167 class HTMLViewer : public mojo::ApplicationDelegate, | 172 class HTMLViewer : public mojo::ApplicationDelegate, |
| 168 public mojo::InterfaceFactory<ContentHandler> { | 173 public mojo::InterfaceFactory<ContentHandler> { |
| 169 public: | 174 public: |
| 170 HTMLViewer() | 175 HTMLViewer() |
| 171 : discardable_memory_allocator_(kDesiredMaxMemory), | 176 : discardable_memory_allocator_(kDesiredMaxMemory), |
| 172 compositor_thread_("compositor thread") {} | 177 compositor_thread_("compositor thread"), |
| 178 is_headless_(false) {} | |
| 173 | 179 |
| 174 ~HTMLViewer() override { blink::shutdown(); } | 180 ~HTMLViewer() override { blink::shutdown(); } |
| 175 | 181 |
| 176 private: | 182 private: |
| 177 // Overridden from ApplicationDelegate: | 183 // Overridden from ApplicationDelegate: |
| 178 void Initialize(mojo::ApplicationImpl* app) override { | 184 void Initialize(mojo::ApplicationImpl* app) override { |
| 185 // TODO(sky): make this typesafe and not leak. | |
| 186 std::set<std::string> paths; | |
| 187 paths.insert("icudtl.dat"); | |
| 188 paths.insert("ui_test.pak"); | |
| 189 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) | |
| 190 paths.insert("natives_blob.bin"); | |
|
Jay Civelli
2015/05/11 21:07:33
Should we use constants for these strings since th
sky
2015/05/11 21:13:35
Definitely. I'm hoping to do this later (see todo
| |
| 191 paths.insert("snapshot_blob.bin"); | |
| 192 #endif | |
| 193 ResourceLoader resource_loader(app->shell(), paths); | |
| 194 if (!resource_loader.BlockUntilLoaded()) { | |
| 195 // Assume on error we're being shut down. | |
| 196 LOG(WARNING) << "html_viewer errored getting resources, exiting"; | |
| 197 mojo::ApplicationImpl::Terminate(); | |
| 198 return; | |
| 199 } | |
| 200 | |
| 201 ResourceLoader::ResourceMap resource_map(resource_loader.resource_map()); | |
| 202 | |
| 179 ui_setup_.reset(new UISetup); | 203 ui_setup_.reset(new UISetup); |
| 180 base::DiscardableMemoryAllocator::SetInstance( | 204 base::DiscardableMemoryAllocator::SetInstance( |
| 181 &discardable_memory_allocator_); | 205 &discardable_memory_allocator_); |
| 182 | 206 |
| 183 renderer_scheduler_ = scheduler::RendererScheduler::Create(); | 207 renderer_scheduler_ = scheduler::RendererScheduler::Create(); |
| 184 blink_platform_.reset( | 208 blink_platform_.reset( |
| 185 new BlinkPlatformImpl(app, renderer_scheduler_.get())); | 209 new BlinkPlatformImpl(app, renderer_scheduler_.get())); |
| 186 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) | 210 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) |
| 187 // Note: this requires file system access. | 211 // Note: this requires file system access. |
| 188 gin::V8Initializer::LoadV8Snapshot(); | 212 CHECK(gin::V8Initializer::LoadV8SnapshotFromFD( |
| 213 resource_map["natives_blob.bin"], 0u, 0u, | |
| 214 resource_map["snapshot_blob.bin"], 0u, 0u)); | |
| 189 #endif | 215 #endif |
| 190 blink::initialize(blink_platform_.get()); | 216 blink::initialize(blink_platform_.get()); |
| 191 base::i18n::InitializeICU(); | 217 base::i18n::InitializeICUWithFileDescriptor( |
| 218 resource_map["icudtl.dat"], base::MemoryMappedFile::Region::kWholeFile); | |
| 192 | 219 |
| 193 ui::RegisterPathProvider(); | 220 ui::RegisterPathProvider(); |
| 194 | 221 |
| 195 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); | 222 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); |
| 196 | 223 |
| 197 logging::LoggingSettings settings; | 224 logging::LoggingSettings settings; |
| 198 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; | 225 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; |
| 199 logging::InitLogging(settings); | 226 logging::InitLogging(settings); |
| 200 // Display process ID, thread ID and timestamp in logs. | 227 // Display process ID, thread ID and timestamp in logs. |
| 201 logging::SetLogItems(true, true, true, false); | 228 logging::SetLogItems(true, true, true, false); |
| 202 | 229 |
| 203 if (command_line->HasSwitch(kDisableEncryptedMedia)) | 230 if (command_line->HasSwitch(kDisableEncryptedMedia)) |
| 204 blink::WebRuntimeFeatures::enableEncryptedMedia(false); | 231 blink::WebRuntimeFeatures::enableEncryptedMedia(false); |
| 205 | 232 |
| 206 is_headless_ = command_line->HasSwitch(kIsHeadless); | 233 is_headless_ = command_line->HasSwitch(kIsHeadless); |
| 207 if (!is_headless_) { | 234 if (!is_headless_) { |
| 208 // TODO(sky): consider putting this into the .so so that we don't need | 235 // TODO(sky): fix lifetime here. |
| 209 // file system access. | 236 MojoPlatformHandle platform_handle = resource_map["ui_test.pak"]; |
| 210 base::FilePath ui_test_pak_path; | 237 // TODO(sky): the first call should be for strings, not images. |
| 211 CHECK(PathService::Get(ui::UI_TEST_PAK, &ui_test_pak_path)); | 238 ui::ResourceBundle::InitSharedInstanceWithPakFileRegion( |
| 212 ui::ResourceBundle::InitSharedInstanceWithPakPath(ui_test_pak_path); | 239 base::File(platform_handle).Pass(), |
| 240 base::MemoryMappedFile::Region::kWholeFile); | |
| 241 ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile( | |
| 242 base::File(platform_handle).Pass(), ui::SCALE_FACTOR_100P); | |
| 213 } | 243 } |
| 214 | 244 |
| 215 compositor_thread_.Start(); | 245 compositor_thread_.Start(); |
| 216 #if defined(OS_ANDROID) | 246 #if defined(OS_ANDROID) |
| 217 // TODO(sky): Get WebMediaPlayerFactory working on android. | 247 // TODO(sky): Get WebMediaPlayerFactory working on android. |
| 218 NOTIMPLEMENTED(); | 248 NOTIMPLEMENTED(); |
| 219 #else | 249 #else |
| 220 bool enable_mojo_media_renderer = | 250 bool enable_mojo_media_renderer = |
| 221 command_line->HasSwitch(kEnableMojoMediaRenderer); | 251 command_line->HasSwitch(kEnableMojoMediaRenderer); |
| 222 | 252 |
| (...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 258 | 288 |
| 259 DISALLOW_COPY_AND_ASSIGN(HTMLViewer); | 289 DISALLOW_COPY_AND_ASSIGN(HTMLViewer); |
| 260 }; | 290 }; |
| 261 | 291 |
| 262 } // namespace html_viewer | 292 } // namespace html_viewer |
| 263 | 293 |
| 264 MojoResult MojoMain(MojoHandle shell_handle) { | 294 MojoResult MojoMain(MojoHandle shell_handle) { |
| 265 mojo::ApplicationRunnerChromium runner(new html_viewer::HTMLViewer); | 295 mojo::ApplicationRunnerChromium runner(new html_viewer::HTMLViewer); |
| 266 return runner.Run(shell_handle); | 296 return runner.Run(shell_handle); |
| 267 } | 297 } |
| OLD | NEW |