| 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/frame.h" | 5 #include "components/web_view/frame.h" |
| 6 | 6 |
| 7 #include <algorithm> | 7 #include <algorithm> |
| 8 | 8 |
| 9 #include "base/auto_reset.h" | 9 #include "base/auto_reset.h" |
| 10 #include "base/bind.h" | 10 #include "base/bind.h" |
| 11 #include "base/callback.h" | 11 #include "base/callback.h" |
| 12 #include "base/stl_util.h" | 12 #include "base/stl_util.h" |
| 13 #include "components/mus/public/cpp/view.h" | 13 #include "components/mus/public/cpp/view.h" |
| 14 #include "components/mus/public/cpp/view_property.h" | 14 #include "components/mus/public/cpp/view_property.h" |
| 15 #include "components/web_view/frame_tree.h" | 15 #include "components/web_view/frame_tree.h" |
| 16 #include "components/web_view/frame_tree_delegate.h" | 16 #include "components/web_view/frame_tree_delegate.h" |
| 17 #include "components/web_view/frame_user_data.h" | 17 #include "components/web_view/frame_user_data.h" |
| 18 #include "components/web_view/frame_utils.h" | 18 #include "components/web_view/frame_utils.h" |
| 19 #include "mojo/application/public/interfaces/shell.mojom.h" | 19 #include "mojo/application/public/interfaces/shell.mojom.h" |
| 20 | 20 |
| 21 using mojo::View; | 21 using mus::View; |
| 22 | 22 |
| 23 DECLARE_VIEW_PROPERTY_TYPE(web_view::Frame*); | 23 DECLARE_VIEW_PROPERTY_TYPE(web_view::Frame*); |
| 24 | 24 |
| 25 namespace web_view { | 25 namespace web_view { |
| 26 | 26 |
| 27 // Used to find the Frame associated with a View. | 27 // Used to find the Frame associated with a View. |
| 28 DEFINE_LOCAL_VIEW_PROPERTY_KEY(Frame*, kFrame, nullptr); | 28 DEFINE_LOCAL_VIEW_PROPERTY_KEY(Frame*, kFrame, nullptr); |
| 29 | 29 |
| 30 namespace { | 30 namespace { |
| 31 | 31 |
| 32 const uint32_t kNoParentId = 0u; | 32 const uint32_t kNoParentId = 0u; |
| 33 const mojo::ConnectionSpecificId kInvalidConnectionId = 0u; | 33 const mus::ConnectionSpecificId kInvalidConnectionId = 0u; |
| 34 | 34 |
| 35 FrameDataPtr FrameToFrameData(const Frame* frame) { | 35 FrameDataPtr FrameToFrameData(const Frame* frame) { |
| 36 FrameDataPtr frame_data(FrameData::New()); | 36 FrameDataPtr frame_data(FrameData::New()); |
| 37 frame_data->frame_id = frame->id(); | 37 frame_data->frame_id = frame->id(); |
| 38 frame_data->parent_id = frame->parent() ? frame->parent()->id() : kNoParentId; | 38 frame_data->parent_id = frame->parent() ? frame->parent()->id() : kNoParentId; |
| 39 frame_data->client_properties = | 39 frame_data->client_properties = |
| 40 mojo::Map<mojo::String, mojo::Array<uint8_t>>::From( | 40 mojo::Map<mojo::String, mojo::Array<uint8_t>>::From( |
| 41 frame->client_properties()); | 41 frame->client_properties()); |
| 42 return frame_data.Pass(); | 42 return frame_data.Pass(); |
| 43 } | 43 } |
| (...skipping 169 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 213 | 213 |
| 214 user_data_ = user_data.Pass(); | 214 user_data_ = user_data.Pass(); |
| 215 frame_tree_client_ = frame_tree_client; | 215 frame_tree_client_ = frame_tree_client; |
| 216 frame_tree_server_binding_.reset(); | 216 frame_tree_server_binding_.reset(); |
| 217 app_id_ = app_id; | 217 app_id_ = app_id; |
| 218 | 218 |
| 219 InitClient(client_type, frame_tree_server_binding.Pass(), | 219 InitClient(client_type, frame_tree_server_binding.Pass(), |
| 220 view_tree_client.Pass()); | 220 view_tree_client.Pass()); |
| 221 } | 221 } |
| 222 | 222 |
| 223 void Frame::OnEmbedAck(bool success, mojo::ConnectionSpecificId connection_id) { | 223 void Frame::OnEmbedAck(bool success, mus::ConnectionSpecificId connection_id) { |
| 224 if (success) | 224 if (success) |
| 225 embedded_connection_id_ = connection_id; | 225 embedded_connection_id_ = connection_id; |
| 226 } | 226 } |
| 227 | 227 |
| 228 void Frame::SetView(mojo::View* view) { | 228 void Frame::SetView(mus::View* view) { |
| 229 DCHECK(!view_); | 229 DCHECK(!view_); |
| 230 DCHECK_EQ(id_, view->id()); | 230 DCHECK_EQ(id_, view->id()); |
| 231 view_ = view; | 231 view_ = view; |
| 232 view_->SetLocalProperty(kFrame, this); | 232 view_->SetLocalProperty(kFrame, this); |
| 233 view_->AddObserver(this); | 233 view_->AddObserver(this); |
| 234 if (pending_navigate_.get()) | 234 if (pending_navigate_.get()) |
| 235 StartNavigate(pending_navigate_.Pass()); | 235 StartNavigate(pending_navigate_.Pass()); |
| 236 } | 236 } |
| 237 | 237 |
| 238 Frame* Frame::GetAncestorWithFrameTreeClient() { | 238 Frame* Frame::GetAncestorWithFrameTreeClient() { |
| (...skipping 149 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 388 } | 388 } |
| 389 | 389 |
| 390 void Frame::OnTreeChanged(const TreeChangeParams& params) { | 390 void Frame::OnTreeChanged(const TreeChangeParams& params) { |
| 391 if (params.new_parent && this == tree_->root()) { | 391 if (params.new_parent && this == tree_->root()) { |
| 392 Frame* child_frame = FindFrame(params.target->id()); | 392 Frame* child_frame = FindFrame(params.target->id()); |
| 393 if (child_frame && !child_frame->view_) | 393 if (child_frame && !child_frame->view_) |
| 394 child_frame->SetView(params.target); | 394 child_frame->SetView(params.target); |
| 395 } | 395 } |
| 396 } | 396 } |
| 397 | 397 |
| 398 void Frame::OnViewDestroying(mojo::View* view) { | 398 void Frame::OnViewDestroying(mus::View* view) { |
| 399 if (parent_) | 399 if (parent_) |
| 400 parent_->Remove(this); | 400 parent_->Remove(this); |
| 401 | 401 |
| 402 // Reset |view_ownership_| so we don't attempt to delete |view_| in the | 402 // Reset |view_ownership_| so we don't attempt to delete |view_| in the |
| 403 // destructor. | 403 // destructor. |
| 404 view_ownership_ = ViewOwnership::DOESNT_OWN_VIEW; | 404 view_ownership_ = ViewOwnership::DOESNT_OWN_VIEW; |
| 405 | 405 |
| 406 if (tree_->root() == this) { | 406 if (tree_->root() == this) { |
| 407 view_->RemoveObserver(this); | 407 view_->RemoveObserver(this); |
| 408 view_ = nullptr; | 408 view_ = nullptr; |
| 409 return; | 409 return; |
| 410 } | 410 } |
| 411 | 411 |
| 412 delete this; | 412 delete this; |
| 413 } | 413 } |
| 414 | 414 |
| 415 void Frame::OnViewEmbeddedAppDisconnected(mojo::View* view) { | 415 void Frame::OnViewEmbeddedAppDisconnected(mus::View* view) { |
| 416 // See FrameTreeDelegate::OnViewEmbeddedAppDisconnected() for details of when | 416 // See FrameTreeDelegate::OnViewEmbeddedAppDisconnected() for details of when |
| 417 // this happens. | 417 // this happens. |
| 418 // | 418 // |
| 419 // Currently we have no way to distinguish between the cases that lead to this | 419 // Currently we have no way to distinguish between the cases that lead to this |
| 420 // being called, so we assume we can continue on. Continuing on is important | 420 // being called, so we assume we can continue on. Continuing on is important |
| 421 // for html as it's entirely possible for a page to create a frame, navigate | 421 // for html as it's entirely possible for a page to create a frame, navigate |
| 422 // to a bogus url and expect the frame to still exist. | 422 // to a bogus url and expect the frame to still exist. |
| 423 // | 423 // |
| 424 // TODO(sky): notify the delegate on this? At a minimum the delegate cares | 424 // TODO(sky): notify the delegate on this? At a minimum the delegate cares |
| 425 // if the root is unembedded as this would correspond to a sab tab. | 425 // if the root is unembedded as this would correspond to a sab tab. |
| (...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 515 // Else case if |target_frame| == root. Treat at top level request. | 515 // Else case if |target_frame| == root. Treat at top level request. |
| 516 } | 516 } |
| 517 tree_->delegate_->NavigateTopLevel(this, request.Pass()); | 517 tree_->delegate_->NavigateTopLevel(this, request.Pass()); |
| 518 } | 518 } |
| 519 | 519 |
| 520 void Frame::DidNavigateLocally(uint32_t frame_id, const mojo::String& url) { | 520 void Frame::DidNavigateLocally(uint32_t frame_id, const mojo::String& url) { |
| 521 NOTIMPLEMENTED(); | 521 NOTIMPLEMENTED(); |
| 522 } | 522 } |
| 523 | 523 |
| 524 } // namespace web_view | 524 } // namespace web_view |
| OLD | NEW |