OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/web_view/web_view_impl.h" | 5 #include "components/web_view/web_view_impl.h" |
6 | 6 |
7 #include <queue> | 7 #include <queue> |
| 8 #include <utility> |
8 | 9 |
9 #include "base/bind.h" | 10 #include "base/bind.h" |
10 #include "base/command_line.h" | 11 #include "base/command_line.h" |
11 #include "components/devtools_service/public/cpp/switches.h" | 12 #include "components/devtools_service/public/cpp/switches.h" |
12 #include "components/mus/public/cpp/scoped_window_ptr.h" | 13 #include "components/mus/public/cpp/scoped_window_ptr.h" |
13 #include "components/mus/public/cpp/window.h" | 14 #include "components/mus/public/cpp/window.h" |
14 #include "components/mus/public/cpp/window_tree_connection.h" | 15 #include "components/mus/public/cpp/window_tree_connection.h" |
15 #include "components/web_view/client_initiated_frame_connection.h" | 16 #include "components/web_view/client_initiated_frame_connection.h" |
16 #include "components/web_view/frame.h" | 17 #include "components/web_view/frame.h" |
17 #include "components/web_view/frame_connection.h" | 18 #include "components/web_view/frame_connection.h" |
(...skipping 18 matching lines...) Expand all Loading... |
36 | 37 |
37 using web_view::mojom::ButtonState; | 38 using web_view::mojom::ButtonState; |
38 | 39 |
39 //////////////////////////////////////////////////////////////////////////////// | 40 //////////////////////////////////////////////////////////////////////////////// |
40 // WebViewImpl, public: | 41 // WebViewImpl, public: |
41 | 42 |
42 WebViewImpl::WebViewImpl(mojo::ApplicationImpl* app, | 43 WebViewImpl::WebViewImpl(mojo::ApplicationImpl* app, |
43 mojom::WebViewClientPtr client, | 44 mojom::WebViewClientPtr client, |
44 mojo::InterfaceRequest<mojom::WebView> request) | 45 mojo::InterfaceRequest<mojom::WebView> request) |
45 : app_(app), | 46 : app_(app), |
46 client_(client.Pass()), | 47 client_(std::move(client)), |
47 binding_(this, request.Pass()), | 48 binding_(this, std::move(request)), |
48 root_(nullptr), | 49 root_(nullptr), |
49 content_(nullptr), | 50 content_(nullptr), |
50 find_controller_(this), | 51 find_controller_(this), |
51 navigation_controller_(this) { | 52 navigation_controller_(this) { |
52 if (EnableRemoteDebugging()) | 53 if (EnableRemoteDebugging()) |
53 devtools_agent_.reset(new FrameDevToolsAgent(app_, this)); | 54 devtools_agent_.reset(new FrameDevToolsAgent(app_, this)); |
54 OnDidNavigate(); | 55 OnDidNavigate(); |
55 } | 56 } |
56 | 57 |
57 WebViewImpl::~WebViewImpl() { | 58 WebViewImpl::~WebViewImpl() { |
(...skipping 15 matching lines...) Expand all Loading... |
73 } | 74 } |
74 | 75 |
75 client_->TopLevelNavigationStarted(pending_url.spec()); | 76 client_->TopLevelNavigationStarted(pending_url.spec()); |
76 | 77 |
77 content_ = root_->connection()->NewWindow(); | 78 content_ = root_->connection()->NewWindow(); |
78 content_->SetBounds(gfx::Rect(root_->bounds().size())); | 79 content_->SetBounds(gfx::Rect(root_->bounds().size())); |
79 root_->AddChild(content_); | 80 root_->AddChild(content_); |
80 content_->SetVisible(true); | 81 content_->SetVisible(true); |
81 content_->AddObserver(this); | 82 content_->AddObserver(this); |
82 | 83 |
83 scoped_ptr<PendingWebViewLoad> pending_load(pending_load_.Pass()); | 84 scoped_ptr<PendingWebViewLoad> pending_load(std::move(pending_load_)); |
84 scoped_ptr<FrameConnection> frame_connection( | 85 scoped_ptr<FrameConnection> frame_connection( |
85 pending_load->frame_connection()); | 86 pending_load->frame_connection()); |
86 mus::mojom::WindowTreeClientPtr window_tree_client = | 87 mus::mojom::WindowTreeClientPtr window_tree_client = |
87 frame_connection->GetWindowTreeClient(); | 88 frame_connection->GetWindowTreeClient(); |
88 | 89 |
89 Frame::ClientPropertyMap client_properties; | 90 Frame::ClientPropertyMap client_properties; |
90 if (devtools_agent_) { | 91 if (devtools_agent_) { |
91 devtools_service::DevToolsAgentPtr forward_agent; | 92 devtools_service::DevToolsAgentPtr forward_agent; |
92 frame_connection->application_connection()->ConnectToService( | 93 frame_connection->application_connection()->ConnectToService( |
93 &forward_agent); | 94 &forward_agent); |
94 devtools_agent_->AttachFrame(forward_agent.Pass(), &client_properties); | 95 devtools_agent_->AttachFrame(std::move(forward_agent), &client_properties); |
95 } | 96 } |
96 | 97 |
97 mojom::FrameClient* frame_client = frame_connection->frame_client(); | 98 mojom::FrameClient* frame_client = frame_connection->frame_client(); |
98 const uint32_t content_handler_id = frame_connection->GetContentHandlerID(); | 99 const uint32_t content_handler_id = frame_connection->GetContentHandlerID(); |
99 frame_tree_.reset(new FrameTree(content_handler_id, content_, | 100 frame_tree_.reset( |
100 window_tree_client.Pass(), this, frame_client, | 101 new FrameTree(content_handler_id, content_, std::move(window_tree_client), |
101 frame_connection.Pass(), client_properties, | 102 this, frame_client, std::move(frame_connection), |
102 pending_load->navigation_start_time())); | 103 client_properties, pending_load->navigation_start_time())); |
103 } | 104 } |
104 | 105 |
105 void WebViewImpl::PreOrderDepthFirstTraverseTree(Frame* node, | 106 void WebViewImpl::PreOrderDepthFirstTraverseTree(Frame* node, |
106 std::vector<Frame*>* output) { | 107 std::vector<Frame*>* output) { |
107 output->push_back(node); | 108 output->push_back(node); |
108 for (Frame* child : node->children()) | 109 for (Frame* child : node->children()) |
109 PreOrderDepthFirstTraverseTree(child, output); | 110 PreOrderDepthFirstTraverseTree(child, output); |
110 } | 111 } |
111 | 112 |
112 //////////////////////////////////////////////////////////////////////////////// | 113 //////////////////////////////////////////////////////////////////////////////// |
113 // WebViewImpl, WebView implementation: | 114 // WebViewImpl, WebView implementation: |
114 | 115 |
115 void WebViewImpl::LoadRequest(mojo::URLRequestPtr request) { | 116 void WebViewImpl::LoadRequest(mojo::URLRequestPtr request) { |
116 navigation_controller_.LoadURL(request.Pass()); | 117 navigation_controller_.LoadURL(std::move(request)); |
117 } | 118 } |
118 | 119 |
119 void WebViewImpl::GetWindowTreeClient( | 120 void WebViewImpl::GetWindowTreeClient( |
120 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> window_tree_client) { | 121 mojo::InterfaceRequest<mus::mojom::WindowTreeClient> window_tree_client) { |
121 mus::WindowTreeConnection::Create( | 122 mus::WindowTreeConnection::Create( |
122 this, window_tree_client.Pass(), | 123 this, std::move(window_tree_client), |
123 mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED); | 124 mus::WindowTreeConnection::CreateType::DONT_WAIT_FOR_EMBED); |
124 } | 125 } |
125 | 126 |
126 void WebViewImpl::Find(const mojo::String& search_text, | 127 void WebViewImpl::Find(const mojo::String& search_text, |
127 bool forward_direction) { | 128 bool forward_direction) { |
128 find_controller_.Find(search_text.To<std::string>(), forward_direction); | 129 find_controller_.Find(search_text.To<std::string>(), forward_direction); |
129 } | 130 } |
130 | 131 |
131 void WebViewImpl::StopFinding() { | 132 void WebViewImpl::StopFinding() { |
132 find_controller_.StopFinding(); | 133 find_controller_.StopFinding(); |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
179 content_ = nullptr; | 180 content_ = nullptr; |
180 } | 181 } |
181 } | 182 } |
182 | 183 |
183 //////////////////////////////////////////////////////////////////////////////// | 184 //////////////////////////////////////////////////////////////////////////////// |
184 // WebViewImpl, FrameTreeDelegate implementation: | 185 // WebViewImpl, FrameTreeDelegate implementation: |
185 | 186 |
186 scoped_ptr<FrameUserData> WebViewImpl::CreateUserDataForNewFrame( | 187 scoped_ptr<FrameUserData> WebViewImpl::CreateUserDataForNewFrame( |
187 mojom::FrameClientPtr frame_client) { | 188 mojom::FrameClientPtr frame_client) { |
188 return make_scoped_ptr( | 189 return make_scoped_ptr( |
189 new ClientInitiatedFrameConnection(frame_client.Pass())); | 190 new ClientInitiatedFrameConnection(std::move(frame_client))); |
190 } | 191 } |
191 | 192 |
192 bool WebViewImpl::CanPostMessageEventToFrame(const Frame* source, | 193 bool WebViewImpl::CanPostMessageEventToFrame(const Frame* source, |
193 const Frame* target, | 194 const Frame* target, |
194 mojom::HTMLMessageEvent* event) { | 195 mojom::HTMLMessageEvent* event) { |
195 return true; | 196 return true; |
196 } | 197 } |
197 | 198 |
198 void WebViewImpl::LoadingStateChanged(bool loading, double progress) { | 199 void WebViewImpl::LoadingStateChanged(bool loading, double progress) { |
199 client_->LoadingStateChanged(loading, progress); | 200 client_->LoadingStateChanged(loading, progress); |
200 } | 201 } |
201 | 202 |
202 void WebViewImpl::TitleChanged(const mojo::String& title) { | 203 void WebViewImpl::TitleChanged(const mojo::String& title) { |
203 client_->TitleChanged(title); | 204 client_->TitleChanged(title); |
204 } | 205 } |
205 | 206 |
206 void WebViewImpl::NavigateTopLevel(Frame* source, mojo::URLRequestPtr request) { | 207 void WebViewImpl::NavigateTopLevel(Frame* source, mojo::URLRequestPtr request) { |
207 client_->TopLevelNavigateRequest(request.Pass()); | 208 client_->TopLevelNavigateRequest(std::move(request)); |
208 } | 209 } |
209 | 210 |
210 void WebViewImpl::CanNavigateFrame(Frame* target, | 211 void WebViewImpl::CanNavigateFrame(Frame* target, |
211 mojo::URLRequestPtr request, | 212 mojo::URLRequestPtr request, |
212 const CanNavigateFrameCallback& callback) { | 213 const CanNavigateFrameCallback& callback) { |
213 FrameConnection::CreateConnectionForCanNavigateFrame( | 214 FrameConnection::CreateConnectionForCanNavigateFrame( |
214 app_, target, request.Pass(), callback); | 215 app_, target, std::move(request), callback); |
215 } | 216 } |
216 | 217 |
217 void WebViewImpl::DidStartNavigation(Frame* frame) {} | 218 void WebViewImpl::DidStartNavigation(Frame* frame) {} |
218 | 219 |
219 void WebViewImpl::DidCommitProvisionalLoad(Frame* frame) { | 220 void WebViewImpl::DidCommitProvisionalLoad(Frame* frame) { |
220 navigation_controller_.FrameDidCommitProvisionalLoad(frame); | 221 navigation_controller_.FrameDidCommitProvisionalLoad(frame); |
221 } | 222 } |
222 | 223 |
223 void WebViewImpl::DidNavigateLocally(Frame* source, | 224 void WebViewImpl::DidNavigateLocally(Frame* source, |
224 const GURL& url) { | 225 const GURL& url) { |
(...skipping 20 matching lines...) Expand all Loading... |
245 find_controller_.OnFindInPageSelectionUpdated(request_id, frame, | 246 find_controller_.OnFindInPageSelectionUpdated(request_id, frame, |
246 active_match_ordinal); | 247 active_match_ordinal); |
247 } | 248 } |
248 | 249 |
249 //////////////////////////////////////////////////////////////////////////////// | 250 //////////////////////////////////////////////////////////////////////////////// |
250 // WebViewImpl, FrameDevToolsAgentDelegate implementation: | 251 // WebViewImpl, FrameDevToolsAgentDelegate implementation: |
251 | 252 |
252 void WebViewImpl::HandlePageNavigateRequest(const GURL& url) { | 253 void WebViewImpl::HandlePageNavigateRequest(const GURL& url) { |
253 mojo::URLRequestPtr request(mojo::URLRequest::New()); | 254 mojo::URLRequestPtr request(mojo::URLRequest::New()); |
254 request->url = url.spec(); | 255 request->url = url.spec(); |
255 client_->TopLevelNavigateRequest(request.Pass()); | 256 client_->TopLevelNavigateRequest(std::move(request)); |
256 } | 257 } |
257 | 258 |
258 //////////////////////////////////////////////////////////////////////////////// | 259 //////////////////////////////////////////////////////////////////////////////// |
259 // WebViewImpl, NavigationControllerDelegate implementation: | 260 // WebViewImpl, NavigationControllerDelegate implementation: |
260 | 261 |
261 void WebViewImpl::OnNavigate(mojo::URLRequestPtr request) { | 262 void WebViewImpl::OnNavigate(mojo::URLRequestPtr request) { |
262 pending_load_.reset(new PendingWebViewLoad(this)); | 263 pending_load_.reset(new PendingWebViewLoad(this)); |
263 pending_load_->Init(request.Pass()); | 264 pending_load_->Init(std::move(request)); |
264 } | 265 } |
265 | 266 |
266 void WebViewImpl::OnDidNavigate() { | 267 void WebViewImpl::OnDidNavigate() { |
267 client_->BackForwardChanged(navigation_controller_.CanGoBack() | 268 client_->BackForwardChanged(navigation_controller_.CanGoBack() |
268 ? ButtonState::BUTTON_STATE_ENABLED | 269 ? ButtonState::BUTTON_STATE_ENABLED |
269 : ButtonState::BUTTON_STATE_DISABLED, | 270 : ButtonState::BUTTON_STATE_DISABLED, |
270 navigation_controller_.CanGoForward() | 271 navigation_controller_.CanGoForward() |
271 ? ButtonState::BUTTON_STATE_ENABLED | 272 ? ButtonState::BUTTON_STATE_ENABLED |
272 : ButtonState::BUTTON_STATE_DISABLED); | 273 : ButtonState::BUTTON_STATE_DISABLED); |
273 } | 274 } |
274 | 275 |
275 //////////////////////////////////////////////////////////////////////////////// | 276 //////////////////////////////////////////////////////////////////////////////// |
276 // WebViewImpl, FindControllerDelegate implementation: | 277 // WebViewImpl, FindControllerDelegate implementation: |
277 | 278 |
278 std::vector<Frame*> WebViewImpl::GetAllFrames() { | 279 std::vector<Frame*> WebViewImpl::GetAllFrames() { |
279 std::vector<Frame*> all_frames; | 280 std::vector<Frame*> all_frames; |
280 PreOrderDepthFirstTraverseTree(frame_tree_->root(), &all_frames); | 281 PreOrderDepthFirstTraverseTree(frame_tree_->root(), &all_frames); |
281 return all_frames; | 282 return all_frames; |
282 } | 283 } |
283 | 284 |
284 mojom::WebViewClient* WebViewImpl::GetWebViewClient() { | 285 mojom::WebViewClient* WebViewImpl::GetWebViewClient() { |
285 return client_.get(); | 286 return client_.get(); |
286 } | 287 } |
287 | 288 |
288 } // namespace web_view | 289 } // namespace web_view |
OLD | NEW |