Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(572)

Side by Side Diff: components/html_viewer/html_viewer.cc

Issue 1132083003: Makes ResourceLoader own handles and return Files (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: comment Created 5 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « components/html_viewer/BUILD.gn ('k') | components/html_viewer/html_viewer_resources.grd » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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"
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 using mojo::InterfaceRequest; 48 using mojo::InterfaceRequest;
49 using mojo::ServiceProvider; 49 using mojo::ServiceProvider;
50 using mojo::ServiceProviderPtr; 50 using mojo::ServiceProviderPtr;
51 using mojo::ShellPtr; 51 using mojo::ShellPtr;
52 using mojo::String; 52 using mojo::String;
53 using mojo::URLLoaderPtr; 53 using mojo::URLLoaderPtr;
54 using mojo::URLResponsePtr; 54 using mojo::URLResponsePtr;
55 using resource_provider::ResourceLoader; 55 using resource_provider::ResourceLoader;
56 56
57 namespace html_viewer { 57 namespace html_viewer {
58 58 namespace {
59 // Switches for html_viewer. 59 // Switches for html_viewer.
60 60
61 // Enable MediaRenderer in media pipeline instead of using the internal 61 // Enable MediaRenderer in media pipeline instead of using the internal
62 // media::Renderer implementation. 62 // media::Renderer implementation.
63 const char kEnableMojoMediaRenderer[] = "enable-mojo-media-renderer"; 63 const char kEnableMojoMediaRenderer[] = "enable-mojo-media-renderer";
64 64
65 // Disables support for (unprefixed) Encrypted Media Extensions. 65 // Disables support for (unprefixed) Encrypted Media Extensions.
66 const char kDisableEncryptedMedia[] = "disable-encrypted-media"; 66 const char kDisableEncryptedMedia[] = "disable-encrypted-media";
67 67
68 // Prevents creation of any output surface. 68 // Prevents creation of any output surface.
69 const char kIsHeadless[] = "is-headless"; 69 const char kIsHeadless[] = "is-headless";
70 70
71 size_t kDesiredMaxMemory = 20 * 1024 * 1024; 71 size_t kDesiredMaxMemory = 20 * 1024 * 1024;
72 72
73 // Paths resources are loaded from.
74 const char kResourceIcudtl[] = "icudtl.dat";
75 const char kResourceResourcesPak[] = "html_viewer_resources.pak";
76 const char kResourceUIPak[] = "ui_test.pak";
77 #if defined(V8_USE_EXTERNAL_STARTUP_DATA)
78 const char kResourceNativesBlob[] = "natives_blob.bin";
79 const char kResourceSnapshotBlob[] = "snapshot_blob.bin";
80 #endif
81
82 } // namespace
83
73 class HTMLViewer; 84 class HTMLViewer;
74 85
75 class HTMLViewerApplication : public mojo::Application { 86 class HTMLViewerApplication : public mojo::Application {
76 public: 87 public:
77 HTMLViewerApplication(InterfaceRequest<Application> request, 88 HTMLViewerApplication(InterfaceRequest<Application> request,
78 URLResponsePtr response, 89 URLResponsePtr response,
79 scoped_refptr<base::MessageLoopProxy> compositor_thread, 90 scoped_refptr<base::MessageLoopProxy> compositor_thread,
80 WebMediaPlayerFactory* web_media_player_factory, 91 WebMediaPlayerFactory* web_media_player_factory,
81 bool is_headless) 92 bool is_headless)
82 : url_(response->url), 93 : url_(response->url),
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
175 HTMLViewer() 186 HTMLViewer()
176 : discardable_memory_allocator_(kDesiredMaxMemory), 187 : discardable_memory_allocator_(kDesiredMaxMemory),
177 compositor_thread_("compositor thread"), 188 compositor_thread_("compositor thread"),
178 is_headless_(false) {} 189 is_headless_(false) {}
179 190
180 ~HTMLViewer() override { blink::shutdown(); } 191 ~HTMLViewer() override { blink::shutdown(); }
181 192
182 private: 193 private:
183 // Overridden from ApplicationDelegate: 194 // Overridden from ApplicationDelegate:
184 void Initialize(mojo::ApplicationImpl* app) override { 195 void Initialize(mojo::ApplicationImpl* app) override {
185 // TODO(sky): make this typesafe and not leak.
186 std::set<std::string> paths; 196 std::set<std::string> paths;
187 paths.insert("icudtl.dat"); 197 paths.insert(kResourceResourcesPak);
188 paths.insert("ui_test.pak"); 198 paths.insert(kResourceIcudtl);
199 paths.insert(kResourceUIPak);
189 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) 200 #if defined(V8_USE_EXTERNAL_STARTUP_DATA)
190 paths.insert("natives_blob.bin"); 201 paths.insert(kResourceNativesBlob);
191 paths.insert("snapshot_blob.bin"); 202 paths.insert(kResourceSnapshotBlob);
192 #endif 203 #endif
193 ResourceLoader resource_loader(app->shell(), paths); 204 ResourceLoader resource_loader(app->shell(), paths);
194 if (!resource_loader.BlockUntilLoaded()) { 205 if (!resource_loader.BlockUntilLoaded()) {
195 // Assume on error we're being shut down. 206 // Assume on error we're being shut down.
196 LOG(WARNING) << "html_viewer errored getting resources, exiting"; 207 LOG(WARNING) << "html_viewer errored getting resources, exiting";
197 mojo::ApplicationImpl::Terminate(); 208 mojo::ApplicationImpl::Terminate();
198 return; 209 return;
199 } 210 }
200 211
201 ResourceLoader::ResourceMap resource_map(resource_loader.resource_map());
202
203 ui_setup_.reset(new UISetup); 212 ui_setup_.reset(new UISetup);
204 base::DiscardableMemoryAllocator::SetInstance( 213 base::DiscardableMemoryAllocator::SetInstance(
205 &discardable_memory_allocator_); 214 &discardable_memory_allocator_);
206 215
207 renderer_scheduler_ = scheduler::RendererScheduler::Create(); 216 renderer_scheduler_ = scheduler::RendererScheduler::Create();
208 blink_platform_.reset( 217 blink_platform_.reset(
209 new BlinkPlatformImpl(app, renderer_scheduler_.get())); 218 new BlinkPlatformImpl(app, renderer_scheduler_.get()));
210 #if defined(V8_USE_EXTERNAL_STARTUP_DATA) 219 #if defined(V8_USE_EXTERNAL_STARTUP_DATA)
211 // Note: this requires file system access. 220 // Note: this requires file system access.
212 CHECK(gin::V8Initializer::LoadV8SnapshotFromFD( 221 CHECK(gin::V8Initializer::LoadV8SnapshotFromFD(
213 resource_map["natives_blob.bin"], 0u, 0u, 222 resource_loader.ReleaseFile(kResourceNativesBlob).TakePlatformFile(),
214 resource_map["snapshot_blob.bin"], 0u, 0u)); 223 0u, 0u,
224 resource_loader.ReleaseFile(kResourceSnapshotBlob).TakePlatformFile(),
225 0u, 0u));
215 #endif 226 #endif
216 blink::initialize(blink_platform_.get()); 227 blink::initialize(blink_platform_.get());
217 base::i18n::InitializeICUWithFileDescriptor( 228 base::i18n::InitializeICUWithFileDescriptor(
218 resource_map["icudtl.dat"], base::MemoryMappedFile::Region::kWholeFile); 229 resource_loader.ReleaseFile(kResourceIcudtl).TakePlatformFile(),
230 base::MemoryMappedFile::Region::kWholeFile);
219 231
220 ui::RegisterPathProvider(); 232 ui::RegisterPathProvider();
221 233
222 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess(); 234 base::CommandLine* command_line = base::CommandLine::ForCurrentProcess();
223 235
224 logging::LoggingSettings settings; 236 logging::LoggingSettings settings;
225 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG; 237 settings.logging_dest = logging::LOG_TO_SYSTEM_DEBUG_LOG;
226 logging::InitLogging(settings); 238 logging::InitLogging(settings);
227 // Display process ID, thread ID and timestamp in logs. 239 // Display process ID, thread ID and timestamp in logs.
228 logging::SetLogItems(true, true, true, false); 240 logging::SetLogItems(true, true, true, false);
229 241
230 if (command_line->HasSwitch(kDisableEncryptedMedia)) 242 if (command_line->HasSwitch(kDisableEncryptedMedia))
231 blink::WebRuntimeFeatures::enableEncryptedMedia(false); 243 blink::WebRuntimeFeatures::enableEncryptedMedia(false);
232 244
233 is_headless_ = command_line->HasSwitch(kIsHeadless); 245 is_headless_ = command_line->HasSwitch(kIsHeadless);
234 if (!is_headless_) { 246 if (!is_headless_) {
235 // TODO(sky): fix lifetime here.
236 MojoPlatformHandle platform_handle = resource_map["ui_test.pak"];
237 // TODO(sky): the first call should be for strings, not images.
238 ui::ResourceBundle::InitSharedInstanceWithPakFileRegion( 247 ui::ResourceBundle::InitSharedInstanceWithPakFileRegion(
239 base::File(platform_handle).Pass(), 248 resource_loader.ReleaseFile(kResourceResourcesPak),
240 base::MemoryMappedFile::Region::kWholeFile); 249 base::MemoryMappedFile::Region::kWholeFile);
241 ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile( 250 ui::ResourceBundle::GetSharedInstance().AddDataPackFromFile(
242 base::File(platform_handle).Pass(), ui::SCALE_FACTOR_100P); 251 resource_loader.ReleaseFile(kResourceUIPak), ui::SCALE_FACTOR_100P);
243 } 252 }
244 253
245 compositor_thread_.Start(); 254 compositor_thread_.Start();
246 #if defined(OS_ANDROID) 255 #if defined(OS_ANDROID)
247 // TODO(sky): Get WebMediaPlayerFactory working on android. 256 // TODO(sky): Get WebMediaPlayerFactory working on android.
248 NOTIMPLEMENTED(); 257 NOTIMPLEMENTED();
249 #else 258 #else
250 bool enable_mojo_media_renderer = 259 bool enable_mojo_media_renderer =
251 command_line->HasSwitch(kEnableMojoMediaRenderer); 260 command_line->HasSwitch(kEnableMojoMediaRenderer);
252 261
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
288 297
289 DISALLOW_COPY_AND_ASSIGN(HTMLViewer); 298 DISALLOW_COPY_AND_ASSIGN(HTMLViewer);
290 }; 299 };
291 300
292 } // namespace html_viewer 301 } // namespace html_viewer
293 302
294 MojoResult MojoMain(MojoHandle shell_handle) { 303 MojoResult MojoMain(MojoHandle shell_handle) {
295 mojo::ApplicationRunnerChromium runner(new html_viewer::HTMLViewer); 304 mojo::ApplicationRunnerChromium runner(new html_viewer::HTMLViewer);
296 return runner.Run(shell_handle); 305 return runner.Run(shell_handle);
297 } 306 }
OLDNEW
« no previous file with comments | « components/html_viewer/BUILD.gn ('k') | components/html_viewer/html_viewer_resources.grd » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698