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/html_viewer/frame.h" | 5 #include "components/html_viewer/html_frame.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 | 8 |
9 #include "base/bind.h" | 9 #include "base/bind.h" |
10 #include "base/single_thread_task_runner.h" | 10 #include "base/single_thread_task_runner.h" |
11 #include "base/stl_util.h" | 11 #include "base/stl_util.h" |
12 #include "base/strings/string_util.h" | 12 #include "base/strings/string_util.h" |
13 #include "base/thread_task_runner_handle.h" | 13 #include "base/thread_task_runner_handle.h" |
14 #include "components/html_viewer/ax_provider_impl.h" | 14 #include "components/html_viewer/ax_provider_impl.h" |
15 #include "components/html_viewer/blink_basic_type_converters.h" | 15 #include "components/html_viewer/blink_basic_type_converters.h" |
16 #include "components/html_viewer/blink_input_events_type_converters.h" | 16 #include "components/html_viewer/blink_input_events_type_converters.h" |
17 #include "components/html_viewer/blink_url_request_type_converters.h" | 17 #include "components/html_viewer/blink_url_request_type_converters.h" |
18 #include "components/html_viewer/frame_tree_manager.h" | |
19 #include "components/html_viewer/geolocation_client_impl.h" | 18 #include "components/html_viewer/geolocation_client_impl.h" |
20 #include "components/html_viewer/global_state.h" | 19 #include "components/html_viewer/global_state.h" |
| 20 #include "components/html_viewer/html_frame_tree_manager.h" |
21 #include "components/html_viewer/media_factory.h" | 21 #include "components/html_viewer/media_factory.h" |
22 #include "components/html_viewer/touch_handler.h" | 22 #include "components/html_viewer/touch_handler.h" |
23 #include "components/html_viewer/web_layer_impl.h" | 23 #include "components/html_viewer/web_layer_impl.h" |
24 #include "components/html_viewer/web_layer_tree_view_impl.h" | 24 #include "components/html_viewer/web_layer_tree_view_impl.h" |
25 #include "components/html_viewer/web_storage_namespace_impl.h" | 25 #include "components/html_viewer/web_storage_namespace_impl.h" |
26 #include "components/html_viewer/web_url_loader_impl.h" | 26 #include "components/html_viewer/web_url_loader_impl.h" |
27 #include "components/view_manager/ids.h" | 27 #include "components/view_manager/ids.h" |
28 #include "components/view_manager/public/cpp/view.h" | 28 #include "components/view_manager/public/cpp/view.h" |
29 #include "components/view_manager/public/cpp/view_manager.h" | 29 #include "components/view_manager/public/cpp/view_manager.h" |
30 #include "components/view_manager/public/interfaces/surfaces.mojom.h" | 30 #include "components/view_manager/public/interfaces/surfaces.mojom.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
67 namespace { | 67 namespace { |
68 | 68 |
69 void ConfigureSettings(blink::WebSettings* settings) { | 69 void ConfigureSettings(blink::WebSettings* settings) { |
70 settings->setCookieEnabled(true); | 70 settings->setCookieEnabled(true); |
71 settings->setDefaultFixedFontSize(13); | 71 settings->setDefaultFixedFontSize(13); |
72 settings->setDefaultFontSize(16); | 72 settings->setDefaultFontSize(16); |
73 settings->setLoadsImagesAutomatically(true); | 73 settings->setLoadsImagesAutomatically(true); |
74 settings->setJavaScriptEnabled(true); | 74 settings->setJavaScriptEnabled(true); |
75 } | 75 } |
76 | 76 |
77 Frame* GetPreviousSibling(Frame* frame) { | 77 HTMLFrame* GetPreviousSibling(HTMLFrame* frame) { |
78 DCHECK(frame->parent()); | 78 DCHECK(frame->parent()); |
79 auto iter = std::find(frame->parent()->children().begin(), | 79 auto iter = std::find(frame->parent()->children().begin(), |
80 frame->parent()->children().end(), frame); | 80 frame->parent()->children().end(), frame); |
81 return (iter == frame->parent()->children().begin()) ? nullptr : *(--iter); | 81 return (iter == frame->parent()->children().begin()) ? nullptr : *(--iter); |
82 } | 82 } |
83 | 83 |
84 } // namespace | 84 } // namespace |
85 | 85 |
86 Frame::Frame(const Frame::CreateParams& params) | 86 HTMLFrame::HTMLFrame(const HTMLFrame::CreateParams& params) |
87 : frame_tree_manager_(params.manager), | 87 : frame_tree_manager_(params.manager), |
88 parent_(params.parent), | 88 parent_(params.parent), |
89 view_(nullptr), | 89 view_(nullptr), |
90 id_(params.id), | 90 id_(params.id), |
91 web_frame_(nullptr), | 91 web_frame_(nullptr), |
92 web_widget_(nullptr), | 92 web_widget_(nullptr), |
93 scope_(blink::WebTreeScopeType::Document), | 93 scope_(blink::WebTreeScopeType::Document), |
94 weak_factory_(this) { | 94 weak_factory_(this) { |
95 if (parent_) | 95 if (parent_) |
96 parent_->children_.push_back(this); | 96 parent_->children_.push_back(this); |
97 } | 97 } |
98 | 98 |
99 void Frame::Init(mojo::View* local_view, | 99 void HTMLFrame::Init(mojo::View* local_view, |
100 const blink::WebString& remote_frame_name, | 100 const blink::WebString& remote_frame_name, |
101 const blink::WebString& remote_origin) { | 101 const blink::WebString& remote_origin) { |
102 if (local_view->id() == id_) | 102 if (local_view->id() == id_) |
103 SetView(local_view); | 103 SetView(local_view); |
104 | 104 |
105 // TODO(sky): need to plumb through scope and other args correctly for frame | 105 // TODO(sky): need to plumb through scope and other args correctly for frame |
106 // creation. | 106 // creation. |
107 if (!parent_) { | 107 if (!parent_) { |
108 CreateWebWidget(); | 108 CreateWebWidget(); |
109 // This is the root of the tree (aka the main frame). | 109 // This is the root of the tree (aka the main frame). |
110 // Expected order for creating webframes is: | 110 // Expected order for creating webframes is: |
111 // . Create local webframe (first webframe must always be local). | 111 // . Create local webframe (first webframe must always be local). |
(...skipping 14 matching lines...) Expand all Loading... |
126 web_view()->setDeviceScaleFactor(global_state()->device_pixel_ratio()); | 126 web_view()->setDeviceScaleFactor(global_state()->device_pixel_ratio()); |
127 if (id_ != local_view->id()) { | 127 if (id_ != local_view->id()) { |
128 blink::WebRemoteFrame* remote_web_frame = blink::WebRemoteFrame::create( | 128 blink::WebRemoteFrame* remote_web_frame = blink::WebRemoteFrame::create( |
129 blink::WebTreeScopeType::Document, this); | 129 blink::WebTreeScopeType::Document, this); |
130 local_web_frame->swap(remote_web_frame); | 130 local_web_frame->swap(remote_web_frame); |
131 // local_web_frame->close(); | 131 // local_web_frame->close(); |
132 web_frame_ = remote_web_frame; | 132 web_frame_ = remote_web_frame; |
133 } | 133 } |
134 } else if (id_ == local_view->id()) { | 134 } else if (id_ == local_view->id()) { |
135 // Frame represents the local frame. | 135 // Frame represents the local frame. |
136 Frame* previous_sibling = GetPreviousSibling(this); | 136 HTMLFrame* previous_sibling = GetPreviousSibling(this); |
137 blink::WebFrame* previous_web_frame = | 137 blink::WebFrame* previous_web_frame = |
138 previous_sibling ? previous_sibling->web_frame() : nullptr; | 138 previous_sibling ? previous_sibling->web_frame() : nullptr; |
139 DCHECK(!parent_->IsLocal()); | 139 DCHECK(!parent_->IsLocal()); |
140 web_frame_ = parent_->web_frame()->toWebRemoteFrame()->createLocalChild( | 140 web_frame_ = parent_->web_frame()->toWebRemoteFrame()->createLocalChild( |
141 blink::WebTreeScopeType::Document, "", blink::WebSandboxFlags::None, | 141 blink::WebTreeScopeType::Document, "", blink::WebSandboxFlags::None, |
142 this, previous_web_frame); | 142 this, previous_web_frame); |
143 CreateWebWidget(); | 143 CreateWebWidget(); |
144 } else if (parent_->web_frame()->isWebLocalFrame()) { | 144 } else if (parent_->web_frame()->isWebLocalFrame()) { |
145 blink::WebLocalFrame* local_web_frame = | 145 blink::WebLocalFrame* local_web_frame = |
146 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, this); | 146 blink::WebLocalFrame::create(blink::WebTreeScopeType::Document, this); |
(...skipping 12 matching lines...) Expand all Loading... |
159 if (!IsLocal()) { | 159 if (!IsLocal()) { |
160 blink::WebRemoteFrame* remote_web_frame = web_frame_->toWebRemoteFrame(); | 160 blink::WebRemoteFrame* remote_web_frame = web_frame_->toWebRemoteFrame(); |
161 if (remote_web_frame) { | 161 if (remote_web_frame) { |
162 remote_web_frame->setReplicatedName(remote_frame_name); | 162 remote_web_frame->setReplicatedName(remote_frame_name); |
163 remote_web_frame->setReplicatedOrigin( | 163 remote_web_frame->setReplicatedOrigin( |
164 blink::WebSecurityOrigin::createFromString(remote_origin)); | 164 blink::WebSecurityOrigin::createFromString(remote_origin)); |
165 } | 165 } |
166 } | 166 } |
167 } | 167 } |
168 | 168 |
169 void Frame::Close() { | 169 void HTMLFrame::Close() { |
170 if (web_widget_) { | 170 if (web_widget_) { |
171 // Closing the widget implicitly detaches the frame. | 171 // Closing the widget implicitly detaches the frame. |
172 web_widget_->close(); | 172 web_widget_->close(); |
173 } else { | 173 } else { |
174 web_frame_->detach(); | 174 web_frame_->detach(); |
175 } | 175 } |
176 } | 176 } |
177 | 177 |
178 const Frame* Frame::FindFrame(uint32_t id) const { | 178 const HTMLFrame* HTMLFrame::FindFrame(uint32_t id) const { |
179 if (id == id_) | 179 if (id == id_) |
180 return this; | 180 return this; |
181 | 181 |
182 for (const Frame* child : children_) { | 182 for (const HTMLFrame* child : children_) { |
183 const Frame* match = child->FindFrame(id); | 183 const HTMLFrame* match = child->FindFrame(id); |
184 if (match) | 184 if (match) |
185 return match; | 185 return match; |
186 } | 186 } |
187 return nullptr; | 187 return nullptr; |
188 } | 188 } |
189 | 189 |
190 blink::WebView* Frame::web_view() { | 190 blink::WebView* HTMLFrame::web_view() { |
191 return web_widget_ && web_widget_->isWebView() | 191 return web_widget_ && web_widget_->isWebView() |
192 ? static_cast<blink::WebView*>(web_widget_) | 192 ? static_cast<blink::WebView*>(web_widget_) |
193 : nullptr; | 193 : nullptr; |
194 } | 194 } |
195 | 195 |
196 Frame::~Frame() { | 196 HTMLFrame::~HTMLFrame() { |
197 DCHECK(children_.empty()); | 197 DCHECK(children_.empty()); |
198 | 198 |
199 if (parent_) { | 199 if (parent_) { |
200 auto iter = | 200 auto iter = |
201 std::find(parent_->children_.begin(), parent_->children_.end(), this); | 201 std::find(parent_->children_.begin(), parent_->children_.end(), this); |
202 parent_->children_.erase(iter); | 202 parent_->children_.erase(iter); |
203 } | 203 } |
204 parent_ = nullptr; | 204 parent_ = nullptr; |
205 | 205 |
206 frame_tree_manager_->OnFrameDestroyed(this); | 206 frame_tree_manager_->OnFrameDestroyed(this); |
207 | 207 |
208 if (view_) { | 208 if (view_) { |
209 view_->RemoveObserver(this); | 209 view_->RemoveObserver(this); |
210 view_->Destroy(); | 210 view_->Destroy(); |
211 } | 211 } |
212 } | 212 } |
213 | 213 |
214 void Frame::SetRemoteFrameName(const mojo::String& name) { | 214 void HTMLFrame::SetRemoteFrameName(const mojo::String& name) { |
215 if (IsLocal()) | 215 if (IsLocal()) |
216 return; | 216 return; |
217 | 217 |
218 blink::WebRemoteFrame* remote_frame = web_frame_->toWebRemoteFrame(); | 218 blink::WebRemoteFrame* remote_frame = web_frame_->toWebRemoteFrame(); |
219 if (remote_frame) | 219 if (remote_frame) |
220 remote_frame->setReplicatedName(name.To<blink::WebString>()); | 220 remote_frame->setReplicatedName(name.To<blink::WebString>()); |
221 } | 221 } |
222 | 222 |
223 bool Frame::IsLocal() const { | 223 bool HTMLFrame::IsLocal() const { |
224 return web_frame_->isWebLocalFrame(); | 224 return web_frame_->isWebLocalFrame(); |
225 } | 225 } |
226 | 226 |
227 void Frame::SetView(mojo::View* view) { | 227 void HTMLFrame::SetView(mojo::View* view) { |
228 DCHECK(!view_); | 228 DCHECK(!view_); |
229 view_ = view; | 229 view_ = view; |
230 view_->AddObserver(this); | 230 view_->AddObserver(this); |
231 } | 231 } |
232 | 232 |
233 void Frame::CreateWebWidget() { | 233 void HTMLFrame::CreateWebWidget() { |
234 DCHECK(!web_widget_); | 234 DCHECK(!web_widget_); |
235 if (parent_) { | 235 if (parent_) { |
236 // TODO(sky): this isn't quite right. I should only have a WebFrameWidget | 236 // TODO(sky): this isn't quite right. I should only have a WebFrameWidget |
237 // for local roots. And the cast to local fram definitely isn't right. | 237 // for local roots. And the cast to local fram definitely isn't right. |
238 web_widget_ = | 238 web_widget_ = |
239 blink::WebFrameWidget::create(this, web_frame_->toWebLocalFrame()); | 239 blink::WebFrameWidget::create(this, web_frame_->toWebLocalFrame()); |
240 } else if (view_ && view_->id() == id_) { | 240 } else if (view_ && view_->id() == id_) { |
241 web_widget_ = blink::WebView::create(this); | 241 web_widget_ = blink::WebView::create(this); |
242 } else { | 242 } else { |
243 web_widget_ = blink::WebView::create(nullptr); | 243 web_widget_ = blink::WebView::create(nullptr); |
244 } | 244 } |
245 | 245 |
246 // Creating the widget calls initializeLayerTreeView() to create the | 246 // Creating the widget calls initializeLayerTreeView() to create the |
247 // |web_layer_tree_view_impl_|. As we haven't yet assigned the |web_widget_| | 247 // |web_layer_tree_view_impl_|. As we haven't yet assigned the |web_widget_| |
248 // we have to set it here. | 248 // we have to set it here. |
249 if (web_layer_tree_view_impl_) { | 249 if (web_layer_tree_view_impl_) { |
250 web_layer_tree_view_impl_->set_widget(web_widget_); | 250 web_layer_tree_view_impl_->set_widget(web_widget_); |
251 web_layer_tree_view_impl_->set_view(view_); | 251 web_layer_tree_view_impl_->set_view(view_); |
252 UpdateWebViewSizeFromViewSize(); | 252 UpdateWebViewSizeFromViewSize(); |
253 } | 253 } |
254 | 254 |
255 if (web_view()) | 255 if (web_view()) |
256 ConfigureSettings(web_view()->settings()); | 256 ConfigureSettings(web_view()->settings()); |
257 } | 257 } |
258 | 258 |
259 void Frame::UpdateFocus() { | 259 void HTMLFrame::UpdateFocus() { |
260 if (!web_widget_ || !view_) | 260 if (!web_widget_ || !view_) |
261 return; | 261 return; |
262 const bool is_focused = view_ && view_->HasFocus(); | 262 const bool is_focused = view_ && view_->HasFocus(); |
263 web_widget_->setFocus(is_focused); | 263 web_widget_->setFocus(is_focused); |
264 if (web_widget_->isWebView()) | 264 if (web_widget_->isWebView()) |
265 static_cast<blink::WebView*>(web_widget_)->setIsActive(is_focused); | 265 static_cast<blink::WebView*>(web_widget_)->setIsActive(is_focused); |
266 } | 266 } |
267 | 267 |
268 void Frame::UpdateWebViewSizeFromViewSize() { | 268 void HTMLFrame::UpdateWebViewSizeFromViewSize() { |
269 if (!web_widget_ || !view_) | 269 if (!web_widget_ || !view_) |
270 return; | 270 return; |
271 | 271 |
272 const gfx::Size size_in_pixels(view_->bounds().width, view_->bounds().height); | 272 const gfx::Size size_in_pixels(view_->bounds().width, view_->bounds().height); |
273 const gfx::Size size_in_dips = gfx::ConvertSizeToDIP( | 273 const gfx::Size size_in_dips = gfx::ConvertSizeToDIP( |
274 view_->viewport_metrics().device_pixel_ratio, size_in_pixels); | 274 view_->viewport_metrics().device_pixel_ratio, size_in_pixels); |
275 web_widget_->resize( | 275 web_widget_->resize( |
276 blink::WebSize(size_in_dips.width(), size_in_dips.height())); | 276 blink::WebSize(size_in_dips.width(), size_in_dips.height())); |
277 web_layer_tree_view_impl_->setViewportSize(size_in_pixels); | 277 web_layer_tree_view_impl_->setViewportSize(size_in_pixels); |
278 } | 278 } |
279 | 279 |
280 void Frame::SwapToRemote(const blink::WebURLRequest& request) { | 280 void HTMLFrame::SwapToRemote(const blink::WebURLRequest& request) { |
281 DCHECK(IsLocal()); | 281 DCHECK(IsLocal()); |
282 mojo::URLRequestPtr url_request = mojo::URLRequest::From(request); | 282 mojo::URLRequestPtr url_request = mojo::URLRequest::From(request); |
283 view_->EmbedAllowingReembed(url_request.Pass()); | 283 view_->EmbedAllowingReembed(url_request.Pass()); |
284 | 284 |
285 // TODO(sky): I tried swapping the frame types here, but that resulted in | 285 // TODO(sky): I tried swapping the frame types here, but that resulted in |
286 // the view never getting sized. Figure out why. | 286 // the view never getting sized. Figure out why. |
287 base::MessageLoop::current()->PostTask( | 287 base::MessageLoop::current()->PostTask( |
288 FROM_HERE, | 288 FROM_HERE, |
289 base::Bind(&Frame::FinishSwapToRemote, weak_factory_.GetWeakPtr())); | 289 base::Bind(&HTMLFrame::FinishSwapToRemote, weak_factory_.GetWeakPtr())); |
290 } | 290 } |
291 | 291 |
292 void Frame::FinishSwapToRemote() { | 292 void HTMLFrame::FinishSwapToRemote() { |
293 if (web_frame_->isWebRemoteFrame()) | 293 if (web_frame_->isWebRemoteFrame()) |
294 return; // We already did the swap. | 294 return; // We already did the swap. |
295 | 295 |
296 blink::WebRemoteFrame* remote_frame = | 296 blink::WebRemoteFrame* remote_frame = |
297 blink::WebRemoteFrame::create(scope_, this); | 297 blink::WebRemoteFrame::create(scope_, this); |
298 remote_frame->initializeFromFrame(web_frame_->toWebLocalFrame()); | 298 remote_frame->initializeFromFrame(web_frame_->toWebLocalFrame()); |
299 // swap() ends up calling us back and we then close the frame. | 299 // swap() ends up calling us back and we then close the frame. |
300 web_frame_->swap(remote_frame); | 300 web_frame_->swap(remote_frame); |
301 web_layer_.reset(new WebLayerImpl(this)); | 301 web_layer_.reset(new WebLayerImpl(this)); |
302 remote_frame->setRemoteWebLayer(web_layer_.get()); | 302 remote_frame->setRemoteWebLayer(web_layer_.get()); |
303 web_frame_ = remote_frame; | 303 web_frame_ = remote_frame; |
304 } | 304 } |
305 | 305 |
306 Frame* Frame::FindFrameWithWebFrame(blink::WebFrame* web_frame) { | 306 HTMLFrame* HTMLFrame::FindFrameWithWebFrame(blink::WebFrame* web_frame) { |
307 if (web_frame_ == web_frame) | 307 if (web_frame_ == web_frame) |
308 return this; | 308 return this; |
309 for (Frame* child_frame : children_) { | 309 for (HTMLFrame* child_frame : children_) { |
310 Frame* result = child_frame->FindFrameWithWebFrame(web_frame); | 310 HTMLFrame* result = child_frame->FindFrameWithWebFrame(web_frame); |
311 if (result) | 311 if (result) |
312 return result; | 312 return result; |
313 } | 313 } |
314 return nullptr; | 314 return nullptr; |
315 } | 315 } |
316 | 316 |
317 void Frame::FrameDetachedImpl(blink::WebFrame* web_frame) { | 317 void HTMLFrame::FrameDetachedImpl(blink::WebFrame* web_frame) { |
318 DCHECK_EQ(web_frame_, web_frame); | 318 DCHECK_EQ(web_frame_, web_frame); |
319 | 319 |
320 while (!children_.empty()) { | 320 while (!children_.empty()) { |
321 Frame* child = children_.front(); | 321 HTMLFrame* child = children_.front(); |
322 child->Close(); | 322 child->Close(); |
323 DCHECK(children_.empty() || children_.front() != child); | 323 DCHECK(children_.empty() || children_.front() != child); |
324 } | 324 } |
325 | 325 |
326 if (web_frame->parent()) | 326 if (web_frame->parent()) |
327 web_frame->parent()->removeChild(web_frame); | 327 web_frame->parent()->removeChild(web_frame); |
328 | 328 |
329 delete this; | 329 delete this; |
330 } | 330 } |
331 | 331 |
332 void Frame::OnViewBoundsChanged(View* view, | 332 void HTMLFrame::OnViewBoundsChanged(View* view, |
333 const Rect& old_bounds, | 333 const Rect& old_bounds, |
334 const Rect& new_bounds) { | 334 const Rect& new_bounds) { |
335 DCHECK_EQ(view, view_); | 335 DCHECK_EQ(view, view_); |
336 UpdateWebViewSizeFromViewSize(); | 336 UpdateWebViewSizeFromViewSize(); |
337 } | 337 } |
338 | 338 |
339 void Frame::OnViewDestroyed(View* view) { | 339 void HTMLFrame::OnViewDestroyed(View* view) { |
340 DCHECK_EQ(view, view_); | 340 DCHECK_EQ(view, view_); |
341 view_->RemoveObserver(this); | 341 view_->RemoveObserver(this); |
342 view_ = nullptr; | 342 view_ = nullptr; |
343 Close(); | 343 Close(); |
344 } | 344 } |
345 | 345 |
346 void Frame::OnViewInputEvent(View* view, const mojo::EventPtr& event) { | 346 void HTMLFrame::OnViewInputEvent(View* view, const mojo::EventPtr& event) { |
347 if (event->pointer_data) { | 347 if (event->pointer_data) { |
348 // Blink expects coordintes to be in DIPs. | 348 // Blink expects coordintes to be in DIPs. |
349 event->pointer_data->x /= global_state()->device_pixel_ratio(); | 349 event->pointer_data->x /= global_state()->device_pixel_ratio(); |
350 event->pointer_data->y /= global_state()->device_pixel_ratio(); | 350 event->pointer_data->y /= global_state()->device_pixel_ratio(); |
351 event->pointer_data->screen_x /= global_state()->device_pixel_ratio(); | 351 event->pointer_data->screen_x /= global_state()->device_pixel_ratio(); |
352 event->pointer_data->screen_y /= global_state()->device_pixel_ratio(); | 352 event->pointer_data->screen_y /= global_state()->device_pixel_ratio(); |
353 } | 353 } |
354 | 354 |
355 if (!touch_handler_ && web_widget_) | 355 if (!touch_handler_ && web_widget_) |
356 touch_handler_.reset(new TouchHandler(web_widget_)); | 356 touch_handler_.reset(new TouchHandler(web_widget_)); |
357 | 357 |
358 if ((event->action == mojo::EVENT_TYPE_POINTER_DOWN || | 358 if ((event->action == mojo::EVENT_TYPE_POINTER_DOWN || |
359 event->action == mojo::EVENT_TYPE_POINTER_UP || | 359 event->action == mojo::EVENT_TYPE_POINTER_UP || |
360 event->action == mojo::EVENT_TYPE_POINTER_CANCEL || | 360 event->action == mojo::EVENT_TYPE_POINTER_CANCEL || |
361 event->action == mojo::EVENT_TYPE_POINTER_MOVE) && | 361 event->action == mojo::EVENT_TYPE_POINTER_MOVE) && |
362 event->pointer_data->kind == mojo::POINTER_KIND_TOUCH) { | 362 event->pointer_data->kind == mojo::POINTER_KIND_TOUCH) { |
363 touch_handler_->OnTouchEvent(*event); | 363 touch_handler_->OnTouchEvent(*event); |
364 return; | 364 return; |
365 } | 365 } |
366 | 366 |
367 if (!web_widget_) | 367 if (!web_widget_) |
368 return; | 368 return; |
369 | 369 |
370 scoped_ptr<blink::WebInputEvent> web_event = | 370 scoped_ptr<blink::WebInputEvent> web_event = |
371 event.To<scoped_ptr<blink::WebInputEvent>>(); | 371 event.To<scoped_ptr<blink::WebInputEvent>>(); |
372 if (web_event) | 372 if (web_event) |
373 web_widget_->handleInputEvent(*web_event); | 373 web_widget_->handleInputEvent(*web_event); |
374 } | 374 } |
375 | 375 |
376 void Frame::OnViewFocusChanged(mojo::View* gained_focus, | 376 void HTMLFrame::OnViewFocusChanged(mojo::View* gained_focus, |
377 mojo::View* lost_focus) { | 377 mojo::View* lost_focus) { |
378 UpdateFocus(); | 378 UpdateFocus(); |
379 } | 379 } |
380 | 380 |
381 void Frame::initializeLayerTreeView() { | 381 void HTMLFrame::initializeLayerTreeView() { |
382 mojo::URLRequestPtr request(mojo::URLRequest::New()); | 382 mojo::URLRequestPtr request(mojo::URLRequest::New()); |
383 request->url = mojo::String::From("mojo:surfaces_service"); | 383 request->url = mojo::String::From("mojo:surfaces_service"); |
384 mojo::SurfacePtr surface; | 384 mojo::SurfacePtr surface; |
385 frame_tree_manager_->app()->ConnectToService(request.Pass(), &surface); | 385 frame_tree_manager_->app()->ConnectToService(request.Pass(), &surface); |
386 | 386 |
387 // TODO(jamesr): Should be mojo:gpu_service | 387 // TODO(jamesr): Should be mojo:gpu_service |
388 mojo::URLRequestPtr request2(mojo::URLRequest::New()); | 388 mojo::URLRequestPtr request2(mojo::URLRequest::New()); |
389 request2->url = mojo::String::From("mojo:view_manager"); | 389 request2->url = mojo::String::From("mojo:view_manager"); |
390 mojo::GpuPtr gpu_service; | 390 mojo::GpuPtr gpu_service; |
391 frame_tree_manager_->app()->ConnectToService(request2.Pass(), &gpu_service); | 391 frame_tree_manager_->app()->ConnectToService(request2.Pass(), &gpu_service); |
392 web_layer_tree_view_impl_.reset(new WebLayerTreeViewImpl( | 392 web_layer_tree_view_impl_.reset(new WebLayerTreeViewImpl( |
393 global_state()->compositor_thread(), | 393 global_state()->compositor_thread(), |
394 global_state()->gpu_memory_buffer_manager(), | 394 global_state()->gpu_memory_buffer_manager(), |
395 global_state()->raster_thread_helper()->task_graph_runner(), | 395 global_state()->raster_thread_helper()->task_graph_runner(), |
396 surface.Pass(), gpu_service.Pass())); | 396 surface.Pass(), gpu_service.Pass())); |
397 } | 397 } |
398 | 398 |
399 blink::WebLayerTreeView* Frame::layerTreeView() { | 399 blink::WebLayerTreeView* HTMLFrame::layerTreeView() { |
400 return web_layer_tree_view_impl_.get(); | 400 return web_layer_tree_view_impl_.get(); |
401 } | 401 } |
402 | 402 |
403 blink::WebStorageNamespace* Frame::createSessionStorageNamespace() { | 403 blink::WebStorageNamespace* HTMLFrame::createSessionStorageNamespace() { |
404 return new WebStorageNamespaceImpl(); | 404 return new WebStorageNamespaceImpl(); |
405 } | 405 } |
406 | 406 |
407 blink::WebMediaPlayer* Frame::createMediaPlayer( | 407 blink::WebMediaPlayer* HTMLFrame::createMediaPlayer( |
408 blink::WebLocalFrame* frame, | 408 blink::WebLocalFrame* frame, |
409 const blink::WebURL& url, | 409 const blink::WebURL& url, |
410 blink::WebMediaPlayerClient* client, | 410 blink::WebMediaPlayerClient* client, |
411 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, | 411 blink::WebMediaPlayerEncryptedMediaClient* encrypted_client, |
412 blink::WebContentDecryptionModule* initial_cdm) { | 412 blink::WebContentDecryptionModule* initial_cdm) { |
413 return global_state()->media_factory()->CreateMediaPlayer( | 413 return global_state()->media_factory()->CreateMediaPlayer( |
414 frame, url, client, encrypted_client, initial_cdm, | 414 frame, url, client, encrypted_client, initial_cdm, |
415 frame_tree_manager_->app()->shell()); | 415 frame_tree_manager_->app()->shell()); |
416 } | 416 } |
417 | 417 |
418 blink::WebFrame* Frame::createChildFrame(blink::WebLocalFrame* parent, | 418 blink::WebFrame* HTMLFrame::createChildFrame( |
419 blink::WebTreeScopeType scope, | 419 blink::WebLocalFrame* parent, |
420 const blink::WebString& frame_name, | 420 blink::WebTreeScopeType scope, |
421 blink::WebSandboxFlags sandbox_flags) { | 421 const blink::WebString& frame_name, |
| 422 blink::WebSandboxFlags sandbox_flags) { |
422 DCHECK(IsLocal()); // Can't create children of remote frames. | 423 DCHECK(IsLocal()); // Can't create children of remote frames. |
423 DCHECK_EQ(parent, web_frame_); | 424 DCHECK_EQ(parent, web_frame_); |
424 DCHECK(view_); // If we're local we have to have a view. | 425 DCHECK(view_); // If we're local we have to have a view. |
425 // Create the view that will house the frame now. We embed once we know the | 426 // Create the view that will house the frame now. We embed once we know the |
426 // url (see decidePolicyForNavigation()). | 427 // url (see decidePolicyForNavigation()). |
427 mojo::View* child_view = view_->view_manager()->CreateView(); | 428 mojo::View* child_view = view_->view_manager()->CreateView(); |
428 child_view->SetVisible(true); | 429 child_view->SetVisible(true); |
429 view_->AddChild(child_view); | 430 view_->AddChild(child_view); |
430 | 431 |
431 // TODO(sky): the act of creating needs to notify the browser side, not | 432 // TODO(sky): the act of creating needs to notify the browser side, not |
432 // navigation. | 433 // navigation. |
433 Frame::CreateParams params(frame_tree_manager_, this, child_view->id()); | 434 HTMLFrame::CreateParams params(frame_tree_manager_, this, child_view->id()); |
434 Frame* child_frame = new Frame(params); | 435 HTMLFrame* child_frame = new HTMLFrame(params); |
435 child_frame->scope_ = scope; | 436 child_frame->scope_ = scope; |
436 | 437 |
437 child_frame->SetView(child_view); | 438 child_frame->SetView(child_view); |
438 | 439 |
439 blink::WebLocalFrame* child_web_frame = | 440 blink::WebLocalFrame* child_web_frame = |
440 blink::WebLocalFrame::create(scope, child_frame); | 441 blink::WebLocalFrame::create(scope, child_frame); |
441 child_frame->web_frame_ = child_web_frame; | 442 child_frame->web_frame_ = child_web_frame; |
442 parent->appendChild(child_web_frame); | 443 parent->appendChild(child_web_frame); |
443 return child_web_frame; | 444 return child_web_frame; |
444 } | 445 } |
445 | 446 |
446 void Frame::frameDetached(blink::WebFrame* web_frame, | 447 void HTMLFrame::frameDetached(blink::WebFrame* web_frame, |
447 blink::WebFrameClient::DetachType type) { | 448 blink::WebFrameClient::DetachType type) { |
448 if (type == blink::WebFrameClient::DetachType::Swap) { | 449 if (type == blink::WebFrameClient::DetachType::Swap) { |
449 web_frame->close(); | 450 web_frame->close(); |
450 return; | 451 return; |
451 } | 452 } |
452 | 453 |
453 DCHECK(type == blink::WebFrameClient::DetachType::Remove); | 454 DCHECK(type == blink::WebFrameClient::DetachType::Remove); |
454 FrameDetachedImpl(web_frame); | 455 FrameDetachedImpl(web_frame); |
455 } | 456 } |
456 | 457 |
457 blink::WebCookieJar* Frame::cookieJar(blink::WebLocalFrame* frame) { | 458 blink::WebCookieJar* HTMLFrame::cookieJar(blink::WebLocalFrame* frame) { |
458 // TODO(darin): Blink does not fallback to the Platform provided WebCookieJar. | 459 // TODO(darin): Blink does not fallback to the Platform provided WebCookieJar. |
459 // Either it should, as it once did, or we should find another solution here. | 460 // Either it should, as it once did, or we should find another solution here. |
460 return blink::Platform::current()->cookieJar(); | 461 return blink::Platform::current()->cookieJar(); |
461 } | 462 } |
462 | 463 |
463 blink::WebNavigationPolicy Frame::decidePolicyForNavigation( | 464 blink::WebNavigationPolicy HTMLFrame::decidePolicyForNavigation( |
464 const NavigationPolicyInfo& info) { | 465 const NavigationPolicyInfo& info) { |
465 if (parent_ && parent_->IsLocal()) { | 466 if (parent_ && parent_->IsLocal()) { |
466 SwapToRemote(info.urlRequest); | 467 SwapToRemote(info.urlRequest); |
467 return blink::WebNavigationPolicyIgnore; | 468 return blink::WebNavigationPolicyIgnore; |
468 } | 469 } |
469 | 470 |
470 return frame_tree_manager_->DecidePolicyForNavigation(this, info); | 471 return frame_tree_manager_->DecidePolicyForNavigation(this, info); |
471 } | 472 } |
472 | 473 |
473 void Frame::didAddMessageToConsole(const blink::WebConsoleMessage& message, | 474 void HTMLFrame::didAddMessageToConsole(const blink::WebConsoleMessage& message, |
474 const blink::WebString& source_name, | 475 const blink::WebString& source_name, |
475 unsigned source_line, | 476 unsigned source_line, |
476 const blink::WebString& stack_trace) { | 477 const blink::WebString& stack_trace) { |
477 VLOG(1) << "[" << source_name.utf8() << "(" << source_line << ")] " | 478 VLOG(1) << "[" << source_name.utf8() << "(" << source_line << ")] " |
478 << message.text.utf8(); | 479 << message.text.utf8(); |
479 } | 480 } |
480 | 481 |
481 void Frame::didFinishLoad(blink::WebLocalFrame* frame) { | 482 void HTMLFrame::didFinishLoad(blink::WebLocalFrame* frame) { |
482 frame_tree_manager_->OnFrameDidFinishLoad(this); | 483 frame_tree_manager_->OnFrameDidFinishLoad(this); |
483 } | 484 } |
484 | 485 |
485 void Frame::didNavigateWithinPage(blink::WebLocalFrame* frame, | 486 void HTMLFrame::didNavigateWithinPage(blink::WebLocalFrame* frame, |
486 const blink::WebHistoryItem& history_item, | 487 const blink::WebHistoryItem& history_item, |
487 blink::WebHistoryCommitType commit_type) { | 488 blink::WebHistoryCommitType commit_type) { |
488 frame_tree_manager_->OnFrameDidNavigateLocally( | 489 frame_tree_manager_->OnFrameDidNavigateLocally( |
489 this, history_item.urlString().utf8()); | 490 this, history_item.urlString().utf8()); |
490 } | 491 } |
491 | 492 |
492 blink::WebGeolocationClient* Frame::geolocationClient() { | 493 blink::WebGeolocationClient* HTMLFrame::geolocationClient() { |
493 if (!geolocation_client_impl_) | 494 if (!geolocation_client_impl_) |
494 geolocation_client_impl_.reset(new GeolocationClientImpl); | 495 geolocation_client_impl_.reset(new GeolocationClientImpl); |
495 return geolocation_client_impl_.get(); | 496 return geolocation_client_impl_.get(); |
496 } | 497 } |
497 | 498 |
498 blink::WebEncryptedMediaClient* Frame::encryptedMediaClient() { | 499 blink::WebEncryptedMediaClient* HTMLFrame::encryptedMediaClient() { |
499 return global_state()->media_factory()->GetEncryptedMediaClient(); | 500 return global_state()->media_factory()->GetEncryptedMediaClient(); |
500 } | 501 } |
501 | 502 |
502 void Frame::didStartLoading(bool to_different_document) { | 503 void HTMLFrame::didStartLoading(bool to_different_document) { |
503 frame_tree_manager_->LoadingStarted(); | 504 frame_tree_manager_->LoadingStarted(); |
504 } | 505 } |
505 | 506 |
506 void Frame::didStopLoading() { | 507 void HTMLFrame::didStopLoading() { |
507 frame_tree_manager_->LoadingStopped(); | 508 frame_tree_manager_->LoadingStopped(); |
508 } | 509 } |
509 | 510 |
510 void Frame::didChangeLoadProgress(double load_progress) { | 511 void HTMLFrame::didChangeLoadProgress(double load_progress) { |
511 frame_tree_manager_->ProgressChanged(load_progress); | 512 frame_tree_manager_->ProgressChanged(load_progress); |
512 } | 513 } |
513 | 514 |
514 void Frame::didChangeName(blink::WebLocalFrame* frame, | 515 void HTMLFrame::didChangeName(blink::WebLocalFrame* frame, |
515 const blink::WebString& name) { | 516 const blink::WebString& name) { |
516 frame_tree_manager_->OnFrameDidChangeName(this, name); | 517 frame_tree_manager_->OnFrameDidChangeName(this, name); |
517 } | 518 } |
518 | 519 |
519 void Frame::frameDetached(blink::WebRemoteFrameClient::DetachType type) { | 520 void HTMLFrame::frameDetached(blink::WebRemoteFrameClient::DetachType type) { |
520 if (type == blink::WebRemoteFrameClient::DetachType::Swap) { | 521 if (type == blink::WebRemoteFrameClient::DetachType::Swap) { |
521 web_frame_->close(); | 522 web_frame_->close(); |
522 return; | 523 return; |
523 } | 524 } |
524 | 525 |
525 DCHECK(type == blink::WebRemoteFrameClient::DetachType::Remove); | 526 DCHECK(type == blink::WebRemoteFrameClient::DetachType::Remove); |
526 FrameDetachedImpl(web_frame_); | 527 FrameDetachedImpl(web_frame_); |
527 } | 528 } |
528 | 529 |
529 void Frame::postMessageEvent(blink::WebLocalFrame* source_frame, | 530 void HTMLFrame::postMessageEvent(blink::WebLocalFrame* source_frame, |
530 blink::WebRemoteFrame* target_frame, | 531 blink::WebRemoteFrame* target_frame, |
531 blink::WebSecurityOrigin target_origin, | 532 blink::WebSecurityOrigin target_origin, |
532 blink::WebDOMMessageEvent event) { | 533 blink::WebDOMMessageEvent event) { |
533 NOTIMPLEMENTED(); | 534 NOTIMPLEMENTED(); |
534 } | 535 } |
535 | 536 |
536 void Frame::initializeChildFrame(const blink::WebRect& frame_rect, | 537 void HTMLFrame::initializeChildFrame(const blink::WebRect& frame_rect, |
537 float scale_factor) { | 538 float scale_factor) { |
538 // TODO(sky): frame_rect is in dips. Need to convert. | 539 // TODO(sky): frame_rect is in dips. Need to convert. |
539 mojo::Rect rect; | 540 mojo::Rect rect; |
540 rect.x = frame_rect.x; | 541 rect.x = frame_rect.x; |
541 rect.y = frame_rect.y; | 542 rect.y = frame_rect.y; |
542 rect.width = frame_rect.width; | 543 rect.width = frame_rect.width; |
543 rect.height = frame_rect.height; | 544 rect.height = frame_rect.height; |
544 view_->SetBounds(rect); | 545 view_->SetBounds(rect); |
545 } | 546 } |
546 | 547 |
547 void Frame::navigate(const blink::WebURLRequest& request, | 548 void HTMLFrame::navigate(const blink::WebURLRequest& request, |
548 bool should_replace_current_entry) { | 549 bool should_replace_current_entry) { |
549 NOTIMPLEMENTED(); | 550 NOTIMPLEMENTED(); |
550 } | 551 } |
551 | 552 |
552 void Frame::reload(bool ignore_cache, bool is_client_redirect) { | 553 void HTMLFrame::reload(bool ignore_cache, bool is_client_redirect) { |
553 NOTIMPLEMENTED(); | 554 NOTIMPLEMENTED(); |
554 } | 555 } |
555 | 556 |
556 void Frame::forwardInputEvent(const blink::WebInputEvent* event) { | 557 void HTMLFrame::forwardInputEvent(const blink::WebInputEvent* event) { |
557 NOTIMPLEMENTED(); | 558 NOTIMPLEMENTED(); |
558 } | 559 } |
559 | 560 |
560 } // namespace mojo | 561 } // namespace mojo |
OLD | NEW |