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