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> |
| 8 |
| 9 #include "base/bind.h" |
7 #include "base/command_line.h" | 10 #include "base/command_line.h" |
8 #include "components/devtools_service/public/cpp/switches.h" | 11 #include "components/devtools_service/public/cpp/switches.h" |
9 #include "components/mus/public/cpp/scoped_view_ptr.h" | 12 #include "components/mus/public/cpp/scoped_view_ptr.h" |
10 #include "components/mus/public/cpp/view.h" | 13 #include "components/mus/public/cpp/view.h" |
11 #include "components/mus/public/cpp/view_tree_connection.h" | 14 #include "components/mus/public/cpp/view_tree_connection.h" |
12 #include "components/web_view/client_initiated_frame_connection.h" | 15 #include "components/web_view/client_initiated_frame_connection.h" |
13 #include "components/web_view/frame.h" | 16 #include "components/web_view/frame.h" |
14 #include "components/web_view/frame_connection.h" | 17 #include "components/web_view/frame_connection.h" |
15 #include "components/web_view/frame_devtools_agent.h" | 18 #include "components/web_view/frame_devtools_agent.h" |
16 #include "components/web_view/frame_tree.h" | 19 #include "components/web_view/frame_tree.h" |
(...skipping 20 matching lines...) Expand all Loading... |
37 // WebViewImpl, public: | 40 // WebViewImpl, public: |
38 | 41 |
39 WebViewImpl::WebViewImpl(mojo::ApplicationImpl* app, | 42 WebViewImpl::WebViewImpl(mojo::ApplicationImpl* app, |
40 mojom::WebViewClientPtr client, | 43 mojom::WebViewClientPtr client, |
41 mojo::InterfaceRequest<mojom::WebView> request) | 44 mojo::InterfaceRequest<mojom::WebView> request) |
42 : app_(app), | 45 : app_(app), |
43 client_(client.Pass()), | 46 client_(client.Pass()), |
44 binding_(this, request.Pass()), | 47 binding_(this, request.Pass()), |
45 root_(nullptr), | 48 root_(nullptr), |
46 content_(nullptr), | 49 content_(nullptr), |
47 navigation_controller_(this) { | 50 navigation_controller_(this), |
| 51 find_controller_(this) { |
48 if (EnableRemoteDebugging()) | 52 if (EnableRemoteDebugging()) |
49 devtools_agent_.reset(new FrameDevToolsAgent(app_, this)); | 53 devtools_agent_.reset(new FrameDevToolsAgent(app_, this)); |
50 OnDidNavigate(); | 54 OnDidNavigate(); |
51 } | 55 } |
52 | 56 |
53 WebViewImpl::~WebViewImpl() { | 57 WebViewImpl::~WebViewImpl() { |
54 if (content_) | 58 if (content_) |
55 content_->RemoveObserver(this); | 59 content_->RemoveObserver(this); |
56 if (root_) { | 60 if (root_) { |
57 root_->RemoveObserver(this); | 61 root_->RemoveObserver(this); |
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
103 | 107 |
104 void WebViewImpl::LoadRequest(mojo::URLRequestPtr request) { | 108 void WebViewImpl::LoadRequest(mojo::URLRequestPtr request) { |
105 navigation_controller_.LoadURL(request.Pass()); | 109 navigation_controller_.LoadURL(request.Pass()); |
106 } | 110 } |
107 | 111 |
108 void WebViewImpl::GetViewTreeClient( | 112 void WebViewImpl::GetViewTreeClient( |
109 mojo::InterfaceRequest<mojo::ViewTreeClient> view_tree_client) { | 113 mojo::InterfaceRequest<mojo::ViewTreeClient> view_tree_client) { |
110 mus::ViewTreeConnection::Create(this, view_tree_client.Pass()); | 114 mus::ViewTreeConnection::Create(this, view_tree_client.Pass()); |
111 } | 115 } |
112 | 116 |
| 117 void WebViewImpl::Find(int32_t request_id, const mojo::String& search_text) { |
| 118 find_controller_.Find(request_id, search_text); |
| 119 } |
| 120 |
| 121 void WebViewImpl::StopFinding() { |
| 122 find_controller_.StopFinding(); |
| 123 } |
| 124 |
113 void WebViewImpl::GoBack() { | 125 void WebViewImpl::GoBack() { |
114 if (!navigation_controller_.CanGoBack()) | 126 if (!navigation_controller_.CanGoBack()) |
115 return; | 127 return; |
116 navigation_controller_.GoBack(); | 128 navigation_controller_.GoBack(); |
117 } | 129 } |
118 | 130 |
119 void WebViewImpl::GoForward() { | 131 void WebViewImpl::GoForward() { |
120 if (!navigation_controller_.CanGoForward()) | 132 if (!navigation_controller_.CanGoForward()) |
121 return; | 133 return; |
122 navigation_controller_.GoForward(); | 134 navigation_controller_.GoForward(); |
(...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
196 FrameConnection::CreateConnectionForCanNavigateFrame( | 208 FrameConnection::CreateConnectionForCanNavigateFrame( |
197 app_, target, request.Pass(), callback); | 209 app_, target, request.Pass(), callback); |
198 } | 210 } |
199 | 211 |
200 void WebViewImpl::DidStartNavigation(Frame* frame) {} | 212 void WebViewImpl::DidStartNavigation(Frame* frame) {} |
201 | 213 |
202 void WebViewImpl::DidCommitProvisionalLoad(Frame* frame) { | 214 void WebViewImpl::DidCommitProvisionalLoad(Frame* frame) { |
203 navigation_controller_.FrameDidCommitProvisionalLoad(frame); | 215 navigation_controller_.FrameDidCommitProvisionalLoad(frame); |
204 } | 216 } |
205 | 217 |
| 218 void WebViewImpl::DidDestroyFrame(Frame* frame) { |
| 219 find_controller_.DidDestroyFrame(frame); |
| 220 } |
| 221 |
| 222 void WebViewImpl::OnFindInFrameCountUpdated(int32_t request_id, |
| 223 Frame* frame, |
| 224 int32_t count, |
| 225 bool final_update) { |
| 226 find_controller_.OnFindInFrameCountUpdated(request_id, frame, count, |
| 227 final_update); |
| 228 } |
| 229 |
| 230 void WebViewImpl::OnFindInPageSelectionUpdated(int32_t request_id, |
| 231 Frame* frame, |
| 232 int32_t active_match_ordinal) { |
| 233 find_controller_.OnFindInPageSelectionUpdated(request_id, frame, |
| 234 active_match_ordinal); |
| 235 } |
| 236 |
206 //////////////////////////////////////////////////////////////////////////////// | 237 //////////////////////////////////////////////////////////////////////////////// |
207 // WebViewImpl, FrameDevToolsAgentDelegate implementation: | 238 // WebViewImpl, FrameDevToolsAgentDelegate implementation: |
208 | 239 |
209 void WebViewImpl::HandlePageNavigateRequest(const GURL& url) { | 240 void WebViewImpl::HandlePageNavigateRequest(const GURL& url) { |
210 mojo::URLRequestPtr request(mojo::URLRequest::New()); | 241 mojo::URLRequestPtr request(mojo::URLRequest::New()); |
211 request->url = url.spec(); | 242 request->url = url.spec(); |
212 client_->TopLevelNavigateRequest(request.Pass()); | 243 client_->TopLevelNavigateRequest(request.Pass()); |
213 } | 244 } |
214 | 245 |
215 //////////////////////////////////////////////////////////////////////////////// | 246 //////////////////////////////////////////////////////////////////////////////// |
216 // WebViewImpl, NavigationControllerDelegate implementation: | 247 // WebViewImpl, NavigationControllerDelegate implementation: |
217 | 248 |
218 void WebViewImpl::OnNavigate(mojo::URLRequestPtr request) { | 249 void WebViewImpl::OnNavigate(mojo::URLRequestPtr request) { |
219 pending_load_.reset(new PendingWebViewLoad(this)); | 250 pending_load_.reset(new PendingWebViewLoad(this)); |
220 pending_load_->Init(request.Pass()); | 251 pending_load_->Init(request.Pass()); |
221 } | 252 } |
222 | 253 |
223 void WebViewImpl::OnDidNavigate() { | 254 void WebViewImpl::OnDidNavigate() { |
224 client_->BackForwardChanged(navigation_controller_.CanGoBack() | 255 client_->BackForwardChanged(navigation_controller_.CanGoBack() |
225 ? ButtonState::BUTTON_STATE_ENABLED | 256 ? ButtonState::BUTTON_STATE_ENABLED |
226 : ButtonState::BUTTON_STATE_DISABLED, | 257 : ButtonState::BUTTON_STATE_DISABLED, |
227 navigation_controller_.CanGoForward() | 258 navigation_controller_.CanGoForward() |
228 ? ButtonState::BUTTON_STATE_ENABLED | 259 ? ButtonState::BUTTON_STATE_ENABLED |
229 : ButtonState::BUTTON_STATE_DISABLED); | 260 : ButtonState::BUTTON_STATE_DISABLED); |
230 } | 261 } |
231 | 262 |
| 263 //////////////////////////////////////////////////////////////////////////////// |
| 264 // WebViewImpl, FindControllerDelegate implementation: |
| 265 |
| 266 std::deque<Frame*> WebViewImpl::GetAllFrames() { |
| 267 std::deque<Frame*> all_frames; |
| 268 std::queue<Frame*> frames_to_search; |
| 269 frames_to_search.push(frame_tree_->root()); |
| 270 while (!frames_to_search.empty()) { |
| 271 // TODO(erg): This is not in depth first order. I'm not actually sure how |
| 272 // blink does traversal though. |
| 273 Frame* current = frames_to_search.front(); |
| 274 frames_to_search.pop(); |
| 275 for (Frame* child : current->children()) |
| 276 frames_to_search.push(child); |
| 277 all_frames.push_back(current); |
| 278 } |
| 279 return all_frames; |
| 280 } |
| 281 |
| 282 mojom::WebViewClient* WebViewImpl::GetWebViewClient() { |
| 283 return client_.get(); |
| 284 } |
| 285 |
232 } // namespace web_view | 286 } // namespace web_view |
OLD | NEW |