1116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Copyright 2014 The Chromium Authors. All rights reserved. 2116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// Use of this source code is governed by a BSD-style license that can be 3116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// found in the LICENSE file. 4116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 5116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#ifndef MOJO_SERVICES_HTML_VIEWER_HTML_DOCUMENT_VIEW_H_ 6116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#define MOJO_SERVICES_HTML_VIEWER_HTML_DOCUMENT_VIEW_H_ 7116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 8116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/compiler_specific.h" 9116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "base/memory/weak_ptr.h" 10116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/public/cpp/application/lazy_interface_ptr.h" 111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h" 121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" 13116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/public/cpp/view_manager/view_observer.h" 141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "mojo/services/public/interfaces/content_handler/content_handler.mojom.h" 15116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/public/interfaces/navigation/navigation.mojom.h" 16116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "mojo/services/public/interfaces/network/url_loader.mojom.h" 17116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/web/WebFrameClient.h" 18116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#include "third_party/WebKit/public/web/WebViewClient.h" 19116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace base { 211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass MessageLoopProxy; 221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci} 231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 24116680a4aac90f2aa7413d9095a592090648e557Ben Murdochnamespace mojo { 25116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WebMediaPlayerFactory; 27116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass ViewManager; 28116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass View; 291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass WebLayerTreeViewImpl; 30116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 31116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch// A view for a single HTML document. 32116680a4aac90f2aa7413d9095a592090648e557Ben Murdochclass HTMLDocumentView : public blink::WebViewClient, 33116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public blink::WebFrameClient, 341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public ViewManagerDelegate, 356e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) public ViewObserver { 36116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch public: 371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Load a new HTMLDocument with |response|. 381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |service_provider_request| should be used to implement a 401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ServiceProvider which exposes services to the connecting application. 411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // Commonly, the connecting application is the ViewManager and it will 421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // request ViewManagerClient. 431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // 441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // |shell| is the Shell connection for this mojo::Application. 451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci HTMLDocumentView(URLResponsePtr response, 461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci InterfaceRequest<ServiceProvider> service_provider_request, 471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell* shell, 481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::MessageLoopProxy> compositor_thread, 491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaPlayerFactory* web_media_player_factory); 50116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual ~HTMLDocumentView(); 51116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 52116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch private: 53116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // WebViewClient methods: 54116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual blink::WebStorageNamespace* createSessionStorageNamespace(); 55116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 56116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // WebWidgetClient methods: 571320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void initializeLayerTreeView(); 581320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual blink::WebLayerTreeView* layerTreeView(); 59116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 60116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // WebFrameClient methods: 611320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual blink::WebMediaPlayer* createMediaPlayer( 621320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebLocalFrame* frame, 631320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebURL& url, 641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebMediaPlayerClient* client); 651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual blink::WebMediaPlayer* createMediaPlayer( 661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebLocalFrame* frame, 671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci const blink::WebURL& url, 681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebMediaPlayerClient* client, 691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci blink::WebContentDecryptionModule* initial_cdm); 7003b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual blink::WebFrame* createChildFrame(blink::WebLocalFrame* parent, 7103b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) const blink::WebString& frameName); 7203b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) virtual void frameDetached(blink::WebFrame*); 735f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) virtual blink::WebCookieJar* cookieJar(blink::WebLocalFrame* frame); 74116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual blink::WebNavigationPolicy decidePolicyForNavigation( 75116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* data, 76116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const blink::WebURLRequest& request, blink::WebNavigationType nav_type, 775f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) blink::WebNavigationPolicy default_policy, bool isRedirect); 78116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void didAddMessageToConsole( 79116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const blink::WebConsoleMessage& message, 80116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const blink::WebString& source_name, 81116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch unsigned source_line, 825f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) const blink::WebString& stack_trace); 83116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch virtual void didNavigateWithinPage( 84116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebLocalFrame* frame, 85116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const blink::WebHistoryItem& history_item, 865f1c94371a64b3196d4be9466099bb892df9b88eTorne (Richard Coles) blink::WebHistoryCommitType commit_type); 87116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 881320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci // ViewManagerDelegate methods: 891320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnEmbed( 901320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ViewManager* view_manager, 911320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci View* root, 921320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ServiceProviderImpl* embedee_service_provider_impl, 931320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ServiceProvider> embedder_service_provider) OVERRIDE; 941320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci virtual void OnViewManagerDisconnected(ViewManager* view_manager) OVERRIDE; 951320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci 96116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch // ViewObserver methods: 976e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnViewBoundsChanged(View* view, 98116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const gfx::Rect& old_bounds, 99116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch const gfx::Rect& new_bounds) OVERRIDE; 1006e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnViewDestroyed(View* view) OVERRIDE; 1016e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) virtual void OnViewInputEvent(View* view, const EventPtr& event) OVERRIDE; 102116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1031320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci void Load(URLResponsePtr response); 104116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 1051320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci URLResponsePtr response_; 1061320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<ServiceProvider> embedder_service_provider_; 1071320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci Shell* shell_; 10803b57e008b61dfcb1fbad3aea950ae0e001748b0Torne (Richard Coles) LazyInterfacePtr<NavigatorHost> navigator_host_; 109116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch blink::WebView* web_view_; 1106e8cce623b6e4fe0c9e4af605d675dd9d0338c38Torne (Richard Coles) View* root_; 1111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci ViewManagerClientFactory view_manager_client_factory_; 1121320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_ptr<WebLayerTreeViewImpl> web_layer_tree_view_impl_; 1131320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci scoped_refptr<base::MessageLoopProxy> compositor_thread_; 1141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci WebMediaPlayerFactory* web_media_player_factory_; 115116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 116116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch base::WeakPtrFactory<HTMLDocumentView> weak_factory_; 117116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch DISALLOW_COPY_AND_ASSIGN(HTMLDocumentView); 118116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch}; 119116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 120116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch} // namespace mojo 121116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch 122116680a4aac90f2aa7413d9095a592090648e557Ben Murdoch#endif // MOJO_SERVICES_HTML_VIEWER_HTML_DOCUMENT_VIEW_H_ 123