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
3 // found in the LICENSE file.
5 #include "base/macros.h"
6 #include "base/message_loop/message_loop.h"
7 #include "base/threading/thread.h"
8 #include "mojo/application/application_runner_chromium.h"
9 #include "mojo/public/c/system/main.h"
10 #include "mojo/public/cpp/application/application_connection.h"
11 #include "mojo/public/cpp/application/application_delegate.h"
12 #include "mojo/public/cpp/application/application_impl.h"
13 #include "mojo/public/cpp/application/interface_factory_impl.h"
14 #include "mojo/services/html_viewer/blink_platform_impl.h"
15 #include "mojo/services/html_viewer/html_document_view.h"
16 #include "mojo/services/html_viewer/webmediaplayer_factory.h"
17 #include "mojo/services/public/interfaces/content_handler/content_handler.mojom.h"
18 #include "third_party/WebKit/public/web/WebKit.h"
20 #if !defined(COMPONENT_BUILD)
21 #include "base/i18n/icu_util.h"
22 #include "base/path_service.h"
23 #include "ui/base/resource/resource_bundle.h"
24 #include "ui/base/ui_base_paths.h"
31 class ContentHandlerImpl
: public InterfaceImpl
<ContentHandler
> {
33 ContentHandlerImpl(Shell
* shell
,
34 scoped_refptr
<base::MessageLoopProxy
> compositor_thread
,
35 WebMediaPlayerFactory
* web_media_player_factory
)
37 compositor_thread_(compositor_thread
),
38 web_media_player_factory_(web_media_player_factory
) {}
39 ~ContentHandlerImpl() override
{}
42 // Overridden from ContentHandler:
44 const mojo::String
& requestor_url
,
45 URLResponsePtr response
,
46 InterfaceRequest
<ServiceProvider
> service_provider_request
) override
{
47 new HTMLDocumentView(response
.Pass(),
48 service_provider_request
.Pass(),
51 web_media_player_factory_
);
55 scoped_refptr
<base::MessageLoopProxy
> compositor_thread_
;
56 WebMediaPlayerFactory
* web_media_player_factory_
;
58 DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl
);
61 class HTMLViewer
: public ApplicationDelegate
,
62 public InterfaceFactory
<ContentHandler
> {
64 HTMLViewer() : compositor_thread_("compositor thread") {}
66 ~HTMLViewer() override
{ blink::shutdown(); }
69 // Overridden from ApplicationDelegate:
70 void Initialize(ApplicationImpl
* app
) override
{
71 shell_
= app
->shell();
72 blink_platform_impl_
.reset(new BlinkPlatformImpl(app
));
73 blink::initialize(blink_platform_impl_
.get());
74 #if !defined(COMPONENT_BUILD)
75 base::i18n::InitializeICU();
77 ui::RegisterPathProvider();
79 base::FilePath ui_test_pak_path
;
80 CHECK(PathService::Get(ui::UI_TEST_PAK
, &ui_test_pak_path
));
81 ui::ResourceBundle::InitSharedInstanceWithPakPath(ui_test_pak_path
);
84 compositor_thread_
.Start();
85 web_media_player_factory_
.reset(new WebMediaPlayerFactory(
86 compositor_thread_
.message_loop_proxy()));
89 bool ConfigureIncomingConnection(ApplicationConnection
* connection
) override
{
90 connection
->AddService(this);
94 // Overridden from InterfaceFactory<ContentHandler>
95 void Create(ApplicationConnection
* connection
,
96 InterfaceRequest
<ContentHandler
> request
) override
{
98 new ContentHandlerImpl(shell_
, compositor_thread_
.message_loop_proxy(),
99 web_media_player_factory_
.get()),
103 scoped_ptr
<BlinkPlatformImpl
> blink_platform_impl_
;
105 base::Thread compositor_thread_
;
106 scoped_ptr
<WebMediaPlayerFactory
> web_media_player_factory_
;
108 DISALLOW_COPY_AND_ASSIGN(HTMLViewer
);
113 MojoResult
MojoMain(MojoHandle shell_handle
) {
114 mojo::ApplicationRunnerChromium
runner(new mojo::HTMLViewer
);
115 return runner
.Run(shell_handle
);