1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 2f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 3f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// found in the LICENSE file. 4f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/message_loop/message_loop.h" 61320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/threading/thread.h" 71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/application/application_runner_chromium.h" 803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)#include "mojo/public/c/system/main.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_connection.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_delegate.h" 11116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/application_impl.h" 125f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles)#include "mojo/public/cpp/application/interface_factory_impl.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/html_viewer/blink_platform_impl.h" 14116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/html_viewer/html_document_view.h" 151320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/html_viewer/webmediaplayer_factory.h" 161320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/interfaces/content_handler/content_handler.mojom.h" 176d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles)#include "third_party/WebKit/public/web/WebKit.h" 18f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(COMPONENT_BUILD) 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/i18n/icu_util.h" 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/path_service.h" 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/resource/resource_bundle.h" 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "ui/base/ui_base_paths.h" 241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 26f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)namespace mojo { 27f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 28f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class HTMLViewer; 29f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass ContentHandlerImpl : public InterfaceImpl<ContentHandler> { 31f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ContentHandlerImpl(Shell* shell, 331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::MessageLoopProxy> compositor_thread, 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaPlayerFactory* web_media_player_factory) 351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci : shell_(shell), 361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci compositor_thread_(compositor_thread), 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_media_player_factory_(web_media_player_factory) {} 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~ContentHandlerImpl() {} 39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 40f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) private: 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Overridden from ContentHandler: 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnConnect( 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const mojo::String& url, 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLResponsePtr response, 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InterfaceRequest<ServiceProvider> service_provider_request) OVERRIDE { 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new HTMLDocumentView(response.Pass(), 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci service_provider_request.Pass(), 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci shell_, 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci compositor_thread_, 501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_media_player_factory_); 511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci } 52f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell* shell_; 541320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::MessageLoopProxy> compositor_thread_; 551320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaPlayerFactory* web_media_player_factory_; 56f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci DISALLOW_COPY_AND_ASSIGN(ContentHandlerImpl); 58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 601320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass HTMLViewer : public ApplicationDelegate, 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public InterfaceFactory<ContentHandler> { 62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) public: 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HTMLViewer() : compositor_thread_("compositor thread") {} 64f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual ~HTMLViewer() { blink::shutdown(); } 66f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 676d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) private: 68116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // Overridden from ApplicationDelegate: 69116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void Initialize(ApplicationImpl* app) OVERRIDE { 701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci shell_ = app->shell(); 71116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink_platform_impl_.reset(new BlinkPlatformImpl(app)); 726d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) blink::initialize(blink_platform_impl_.get()); 731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#if !defined(COMPONENT_BUILD) 741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::i18n::InitializeICU(); 751320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 761320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::RegisterPathProvider(); 771320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 781320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::FilePath ui_test_pak_path; 791320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci CHECK(PathService::Get(ui::UI_TEST_PAK, &ui_test_pak_path)); 801320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ui::ResourceBundle::InitSharedInstanceWithPakPath(ui_test_pak_path); 811320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#endif 821320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 831320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci compositor_thread_.Start(); 841320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_media_player_factory_.reset(new WebMediaPlayerFactory( 851320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci compositor_thread_.message_loop_proxy())); 86116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch } 876d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 88116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual bool ConfigureIncomingConnection(ApplicationConnection* connection) 89116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch OVERRIDE { 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci connection->AddService(this); 91116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch return true; 92f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) } 93f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Overridden from InterfaceFactory<ContentHandler> 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void Create(ApplicationConnection* connection, 961320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InterfaceRequest<ContentHandler> request) OVERRIDE { 971320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci BindToRequest( 981320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci new ContentHandlerImpl(shell_, compositor_thread_.message_loop_proxy(), 991320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci web_media_player_factory_.get()), 1001320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci &request); 1016d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) } 1026d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) 1036d86b77056ed63eb6871182f42a9fd5f07550f90Torne (Richard Coles) scoped_ptr<BlinkPlatformImpl> blink_platform_impl_; 1041320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell* shell_; 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci base::Thread compositor_thread_; 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<WebMediaPlayerFactory> web_media_player_factory_; 107f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 108f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) DISALLOW_COPY_AND_ASSIGN(HTMLViewer); 109f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)}; 110f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)} // namespace mojo 112f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles) 11303b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles)MojoResult MojoMain(MojoHandle shell_handle) { 11403b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) mojo::ApplicationRunnerChromium runner(new mojo::HTMLViewer); 11503b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) return runner.Run(shell_handle); 116f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)} 117