OLD | NEW |
| (Empty) |
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 COMPONENTS_HTML_VIEWER_HTML_DOCUMENT_H_ | |
6 #define COMPONENTS_HTML_VIEWER_HTML_DOCUMENT_H_ | |
7 | |
8 #include <set> | |
9 | |
10 #include "base/callback.h" | |
11 #include "base/macros.h" | |
12 #include "base/memory/scoped_ptr.h" | |
13 #include "base/memory/scoped_vector.h" | |
14 #include "components/devtools_service/public/interfaces/devtools_service.mojom.h
" | |
15 #include "components/html_viewer/ax_provider_impl.h" | |
16 #include "components/html_viewer/html_frame_delegate.h" | |
17 #include "components/html_viewer/public/interfaces/test_html_viewer.mojom.h" | |
18 #include "components/mus/public/cpp/window_tree_delegate.h" | |
19 #include "components/web_view/public/interfaces/frame.mojom.h" | |
20 #include "mojo/services/network/public/interfaces/url_loader.mojom.h" | |
21 #include "mojo/shell/public/cpp/app_lifetime_helper.h" | |
22 #include "mojo/shell/public/cpp/interface_factory.h" | |
23 #include "mojo/shell/public/interfaces/application.mojom.h" | |
24 | |
25 namespace base { | |
26 class SingleThreadTaskRunner; | |
27 } | |
28 | |
29 namespace mus { | |
30 class Window; | |
31 class WindowTreeConnection; | |
32 } | |
33 | |
34 namespace html_viewer { | |
35 | |
36 class AxProviderImpl; | |
37 class DocumentResourceWaiter; | |
38 class GlobalState; | |
39 class HTMLFactory; | |
40 class HTMLFrame; | |
41 class TestHTMLViewerImpl; | |
42 class WindowTreeDelegateImpl; | |
43 class WebLayerTreeViewImpl; | |
44 | |
45 // A window for a single HTML document. | |
46 // | |
47 // HTMLDocument is deleted in one of two ways: | |
48 // . When the Window the HTMLDocument is embedded in is destroyed. | |
49 // . Explicitly by way of Destroy(). | |
50 class HTMLDocument | |
51 : public mus::WindowTreeDelegate, | |
52 public HTMLFrameDelegate, | |
53 public mojo::InterfaceFactory<mojo::AxProvider>, | |
54 public mojo::InterfaceFactory<web_view::mojom::FrameClient>, | |
55 public mojo::InterfaceFactory<TestHTMLViewer>, | |
56 public mojo::InterfaceFactory<devtools_service::DevToolsAgent>, | |
57 public mojo::InterfaceFactory<mus::mojom::WindowTreeClient> { | |
58 public: | |
59 using DeleteCallback = base::Callback<void(HTMLDocument*)>; | |
60 | |
61 // Load a new HTMLDocument with |response|. | |
62 // |html_document_shell| is the application this app was created in, and | |
63 // |connection| the specific connection triggering this new instance. | |
64 // |setup| is used to obtain init type state (such as resources). | |
65 HTMLDocument(mojo::Shell* html_document_shell, | |
66 mojo::Connection* connection, | |
67 mojo::URLResponsePtr response, | |
68 GlobalState* setup, | |
69 const DeleteCallback& delete_callback, | |
70 HTMLFactory* factory); | |
71 | |
72 // Deletes this object. | |
73 void Destroy(); | |
74 | |
75 private: | |
76 friend class DocumentResourceWaiter; // So it can call Load(). | |
77 | |
78 // Requests for interfaces before the document is loaded go here. Once | |
79 // loaded the requests are bound and BeforeLoadCache is deleted. | |
80 struct BeforeLoadCache { | |
81 BeforeLoadCache(); | |
82 ~BeforeLoadCache(); | |
83 | |
84 std::set<mojo::InterfaceRequest<mojo::AxProvider>*> ax_provider_requests; | |
85 std::set<mojo::InterfaceRequest<TestHTMLViewer>*> test_interface_requests; | |
86 }; | |
87 | |
88 // Any state that needs to be moved when rendering transfers from one frame | |
89 // to another is stored here. | |
90 struct TransferableState { | |
91 TransferableState(); | |
92 ~TransferableState(); | |
93 | |
94 // Takes the state from |other|. | |
95 void Move(TransferableState* other); | |
96 | |
97 bool owns_window_tree_connection; | |
98 mus::Window* root; | |
99 scoped_ptr<WindowTreeDelegateImpl> window_tree_delegate_impl; | |
100 }; | |
101 | |
102 ~HTMLDocument() override; | |
103 | |
104 void Load(); | |
105 | |
106 BeforeLoadCache* GetBeforeLoadCache(); | |
107 | |
108 // WindowTreeDelegate: | |
109 void OnEmbed(mus::Window* root) override; | |
110 void OnConnectionLost(mus::WindowTreeConnection* connection) override; | |
111 | |
112 // HTMLFrameDelegate: | |
113 mojo::Shell* GetShell() override; | |
114 HTMLFactory* GetHTMLFactory() override; | |
115 void OnFrameDidFinishLoad() override; | |
116 void OnFrameSwappedToRemote() override; | |
117 void OnSwap(HTMLFrame* frame, HTMLFrameDelegate* old_delegate) override; | |
118 void OnFrameDestroyed() override; | |
119 | |
120 // mojo::InterfaceFactory<mojo::AxProvider>: | |
121 void Create(mojo::Connection* connection, | |
122 mojo::InterfaceRequest<mojo::AxProvider> request) override; | |
123 | |
124 // mojo::InterfaceFactory<web_view::mojom::FrameClient>: | |
125 void Create( | |
126 mojo::Connection* connection, | |
127 mojo::InterfaceRequest<web_view::mojom::FrameClient> request) override; | |
128 | |
129 // mojo::InterfaceFactory<TestHTMLViewer>: | |
130 void Create(mojo::Connection* connection, | |
131 mojo::InterfaceRequest<TestHTMLViewer> request) override; | |
132 | |
133 // mojo::InterfaceFactory<devtools_service::DevToolsAgent>: | |
134 void Create( | |
135 mojo::Connection* connection, | |
136 mojo::InterfaceRequest<devtools_service::DevToolsAgent> request) override; | |
137 | |
138 // mojo::InterfaceFactory<mus::WindowTreeClient>: | |
139 void Create( | |
140 mojo::Connection* connection, | |
141 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> request) override; | |
142 | |
143 scoped_ptr<mojo::AppRefCount> app_refcount_; | |
144 mojo::Shell* html_document_shell_; | |
145 mojo::Connection* connection_; | |
146 | |
147 // HTMLDocument owns these pointers; binding requests after document load. | |
148 std::set<AxProviderImpl*> ax_providers_; | |
149 | |
150 ScopedVector<TestHTMLViewerImpl> test_html_viewers_; | |
151 | |
152 // Set to true when the local frame has finished loading. | |
153 bool did_finish_local_frame_load_ = false; | |
154 | |
155 GlobalState* global_state_; | |
156 | |
157 HTMLFrame* frame_; | |
158 | |
159 scoped_ptr<DocumentResourceWaiter> resource_waiter_; | |
160 | |
161 scoped_ptr<BeforeLoadCache> before_load_cache_; | |
162 | |
163 DeleteCallback delete_callback_; | |
164 | |
165 HTMLFactory* factory_; | |
166 | |
167 TransferableState transferable_state_; | |
168 | |
169 // Cache interface request of DevToolsAgent if |frame_| hasn't been | |
170 // initialized. | |
171 mojo::InterfaceRequest<devtools_service::DevToolsAgent> | |
172 devtools_agent_request_; | |
173 | |
174 DISALLOW_COPY_AND_ASSIGN(HTMLDocument); | |
175 }; | |
176 | |
177 } // namespace html_viewer | |
178 | |
179 #endif // COMPONENTS_HTML_VIEWER_HTML_DOCUMENT_H_ | |
OLD | NEW |