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. 4 5#ifndef MOJO_SERVICES_HTML_VIEWER_HTML_DOCUMENT_VIEW_H_ 6#define MOJO_SERVICES_HTML_VIEWER_HTML_DOCUMENT_VIEW_H_ 7 8#include "base/compiler_specific.h" 9#include "base/memory/weak_ptr.h" 10#include "mojo/public/cpp/application/lazy_interface_ptr.h" 11#include "mojo/services/public/cpp/view_manager/view_manager_client_factory.h" 12#include "mojo/services/public/cpp/view_manager/view_manager_delegate.h" 13#include "mojo/services/public/cpp/view_manager/view_observer.h" 14#include "mojo/services/public/interfaces/content_handler/content_handler.mojom.h" 15#include "mojo/services/public/interfaces/navigation/navigation.mojom.h" 16#include "mojo/services/public/interfaces/network/url_loader.mojom.h" 17#include "third_party/WebKit/public/web/WebFrameClient.h" 18#include "third_party/WebKit/public/web/WebViewClient.h" 19 20namespace base { 21class MessageLoopProxy; 22} 23 24namespace mojo { 25 26class WebMediaPlayerFactory; 27class ViewManager; 28class View; 29class WebLayerTreeViewImpl; 30 31// A view for a single HTML document. 32class HTMLDocumentView : public blink::WebViewClient, 33 public blink::WebFrameClient, 34 public ViewManagerDelegate, 35 public ViewObserver { 36 public: 37 // Load a new HTMLDocument with |response|. 38 // 39 // |service_provider_request| should be used to implement a 40 // ServiceProvider which exposes services to the connecting application. 41 // Commonly, the connecting application is the ViewManager and it will 42 // request ViewManagerClient. 43 // 44 // |shell| is the Shell connection for this mojo::Application. 45 HTMLDocumentView(URLResponsePtr response, 46 InterfaceRequest<ServiceProvider> service_provider_request, 47 Shell* shell, 48 scoped_refptr<base::MessageLoopProxy> compositor_thread, 49 WebMediaPlayerFactory* web_media_player_factory); 50 virtual ~HTMLDocumentView(); 51 52 private: 53 // WebViewClient methods: 54 virtual blink::WebStorageNamespace* createSessionStorageNamespace(); 55 56 // WebWidgetClient methods: 57 virtual void initializeLayerTreeView(); 58 virtual blink::WebLayerTreeView* layerTreeView(); 59 60 // WebFrameClient methods: 61 virtual blink::WebMediaPlayer* createMediaPlayer( 62 blink::WebLocalFrame* frame, 63 const blink::WebURL& url, 64 blink::WebMediaPlayerClient* client); 65 virtual blink::WebMediaPlayer* createMediaPlayer( 66 blink::WebLocalFrame* frame, 67 const blink::WebURL& url, 68 blink::WebMediaPlayerClient* client, 69 blink::WebContentDecryptionModule* initial_cdm); 70 virtual blink::WebFrame* createChildFrame(blink::WebLocalFrame* parent, 71 const blink::WebString& frameName); 72 virtual void frameDetached(blink::WebFrame*); 73 virtual blink::WebCookieJar* cookieJar(blink::WebLocalFrame* frame); 74 virtual blink::WebNavigationPolicy decidePolicyForNavigation( 75 blink::WebLocalFrame* frame, blink::WebDataSource::ExtraData* data, 76 const blink::WebURLRequest& request, blink::WebNavigationType nav_type, 77 blink::WebNavigationPolicy default_policy, bool isRedirect); 78 virtual void didAddMessageToConsole( 79 const blink::WebConsoleMessage& message, 80 const blink::WebString& source_name, 81 unsigned source_line, 82 const blink::WebString& stack_trace); 83 virtual void didNavigateWithinPage( 84 blink::WebLocalFrame* frame, 85 const blink::WebHistoryItem& history_item, 86 blink::WebHistoryCommitType commit_type); 87 88 // ViewManagerDelegate methods: 89 virtual void OnEmbed( 90 ViewManager* view_manager, 91 View* root, 92 ServiceProviderImpl* embedee_service_provider_impl, 93 scoped_ptr<ServiceProvider> embedder_service_provider) OVERRIDE; 94 virtual void OnViewManagerDisconnected(ViewManager* view_manager) OVERRIDE; 95 96 // ViewObserver methods: 97 virtual void OnViewBoundsChanged(View* view, 98 const gfx::Rect& old_bounds, 99 const gfx::Rect& new_bounds) OVERRIDE; 100 virtual void OnViewDestroyed(View* view) OVERRIDE; 101 virtual void OnViewInputEvent(View* view, const EventPtr& event) OVERRIDE; 102 103 void Load(URLResponsePtr response); 104 105 URLResponsePtr response_; 106 scoped_ptr<ServiceProvider> embedder_service_provider_; 107 Shell* shell_; 108 LazyInterfacePtr<NavigatorHost> navigator_host_; 109 blink::WebView* web_view_; 110 View* root_; 111 ViewManagerClientFactory view_manager_client_factory_; 112 scoped_ptr<WebLayerTreeViewImpl> web_layer_tree_view_impl_; 113 scoped_refptr<base::MessageLoopProxy> compositor_thread_; 114 WebMediaPlayerFactory* web_media_player_factory_; 115 116 base::WeakPtrFactory<HTMLDocumentView> weak_factory_; 117 DISALLOW_COPY_AND_ASSIGN(HTMLDocumentView); 118}; 119 120} // namespace mojo 121 122#endif // MOJO_SERVICES_HTML_VIEWER_HTML_DOCUMENT_VIEW_H_ 123