| Index: components/view_manager/view_manager_service_impl.cc
|
| diff --git a/components/view_manager/view_manager_service_impl.cc b/components/view_manager/view_manager_service_impl.cc
|
| index 96c34f6e107c4811778106c64784d506b83f3f0b..21b72efeb34f24e58c88efb71307fccae9944222 100644
|
| --- a/components/view_manager/view_manager_service_impl.cc
|
| +++ b/components/view_manager/view_manager_service_impl.cc
|
| @@ -35,7 +35,6 @@ struct ViewManagerServiceImpl::PendingEmbed
|
| PendingEmbed() : embed_root(nullptr) {}
|
|
|
| ViewManagerServiceImpl* embed_root;
|
| - mojo::URLRequestPtr url_request;
|
| ViewId view_id;
|
| mojo::Callback<void(bool)> callback;
|
|
|
| @@ -48,14 +47,10 @@ struct ViewManagerServiceImpl::PendingEmbed
|
| ViewManagerServiceImpl::ViewManagerServiceImpl(
|
| ConnectionManager* connection_manager,
|
| mojo::ConnectionSpecificId creator_id,
|
| - const std::string& creator_url,
|
| - const std::string& url,
|
| const ViewId& root_id)
|
| : connection_manager_(connection_manager),
|
| id_(connection_manager_->GetAndAdvanceNextConnectionId()),
|
| - url_(url),
|
| creator_id_(creator_id),
|
| - creator_url_(creator_url),
|
| client_(nullptr),
|
| is_embed_root_(false) {
|
| CHECK(GetView(root_id));
|
| @@ -71,9 +66,7 @@ ViewManagerServiceImpl::~ViewManagerServiceImpl() {
|
| }
|
|
|
| void ViewManagerServiceImpl::Init(mojo::ViewManagerClient* client,
|
| - mojo::ViewManagerServicePtr service_ptr,
|
| - InterfaceRequest<ServiceProvider> services,
|
| - ServiceProviderPtr exposed_services) {
|
| + mojo::ViewManagerServicePtr service_ptr) {
|
| DCHECK(!client_);
|
| client_ = client;
|
| std::vector<const ServerView*> to_send;
|
| @@ -86,8 +79,7 @@ void ViewManagerServiceImpl::Init(mojo::ViewManagerClient* client,
|
| const mojo::Id focused_view_transport_id(
|
| ViewIdToTransportId(focused_view ? focused_view->id() : ViewId()));
|
|
|
| - client->OnEmbed(id_, creator_url_, ViewToViewData(to_send.front()),
|
| - service_ptr.Pass(), services.Pass(), exposed_services.Pass(),
|
| + client->OnEmbed(id_, ViewToViewData(to_send.front()), service_ptr.Pass(),
|
| focused_view_transport_id);
|
| }
|
|
|
| @@ -161,16 +153,10 @@ bool ViewManagerServiceImpl::SetViewVisibility(const ViewId& view_id,
|
| return true;
|
| }
|
|
|
| -void ViewManagerServiceImpl::SetEmbedRoot() {
|
| - is_embed_root_ = true;
|
| -}
|
| -
|
| -void ViewManagerServiceImpl::Embed(mojo::URLRequestPtr request,
|
| - const ViewId& view_id,
|
| - EmbedType type,
|
| - InterfaceRequest<ServiceProvider> services,
|
| - ServiceProviderPtr exposed_services,
|
| - const mojo::Callback<void(bool)>& callback) {
|
| +void ViewManagerServiceImpl::EmbedAllowingReembed(
|
| + const ViewId& view_id,
|
| + mojo::URLRequestPtr request,
|
| + const mojo::Callback<void(bool)>& callback) {
|
| if (!CanEmbed(view_id)) {
|
| callback.Run(false);
|
| return;
|
| @@ -178,11 +164,10 @@ void ViewManagerServiceImpl::Embed(mojo::URLRequestPtr request,
|
|
|
| ViewManagerServiceImpl* embed_root = nullptr;
|
|
|
| - // Only the creator is allowed to reset reembed.
|
| ServerView* view = GetView(view_id);
|
| DCHECK(view); // CanEmbed() returns true only if |view_id| is valid.
|
| if (view->id().connection_id == id_) {
|
| - view->set_allows_reembed(type == EmbedType::ALLOW_REEMBED);
|
| + view->set_allows_reembed(true);
|
|
|
| // Only consult the embed root if the creator is doing the embed. If someone
|
| // other than the creator is doing the embed they were granted embed access.
|
| @@ -191,8 +176,7 @@ void ViewManagerServiceImpl::Embed(mojo::URLRequestPtr request,
|
|
|
| if (!embed_root) {
|
| PrepareForEmbed(view_id);
|
| - connection_manager_->EmbedAtView(id_, request.Pass(), view_id,
|
| - services.Pass(), exposed_services.Pass());
|
| + connection_manager_->EmbedAtView(id_, view_id, request.Pass());
|
| callback.Run(true);
|
| return;
|
| }
|
| @@ -202,18 +186,16 @@ void ViewManagerServiceImpl::Embed(mojo::URLRequestPtr request,
|
| pending_embeds_.insert(pending_embed);
|
| pending_embed->embed_root = embed_root;
|
| pending_embed->view_id = view_id;
|
| - pending_embed->url_request = request.Pass();
|
| pending_embed->callback = callback;
|
| pending_embeds_.insert(pending_embed);
|
| - embed_root->client()->OnWillEmbed(
|
| - ViewIdToTransportId(view_id), services.Pass(), exposed_services.Pass(),
|
| - base::Bind(&ViewManagerServiceImpl::OnWillEmbedDone,
|
| + embed_root->client()->OnEmbedForDescendant(
|
| + ViewIdToTransportId(view_id), request.Pass(),
|
| + base::Bind(&ViewManagerServiceImpl::OnEmbedForDescendantDone,
|
| base::Unretained(this), pending_embed));
|
| }
|
|
|
| bool ViewManagerServiceImpl::Embed(const ViewId& view_id,
|
| mojo::ViewManagerClientPtr client) {
|
| - // TODO(sky): wire up embed root.
|
| if (!client.get() || !CanEmbed(view_id))
|
| return false;
|
| PrepareForEmbed(view_id);
|
| @@ -567,20 +549,17 @@ void ViewManagerServiceImpl::RemoveChildrenAsPartOfEmbed(
|
| view->Remove(children[i]);
|
| }
|
|
|
| -void ViewManagerServiceImpl::OnWillEmbedDone(
|
| +void ViewManagerServiceImpl::OnEmbedForDescendantDone(
|
| scoped_refptr<PendingEmbed> pending_embed,
|
| - bool allow_embed,
|
| - mojo::InterfaceRequest<mojo::ServiceProvider> services,
|
| - mojo::ServiceProviderPtr exposed_services) {
|
| + mojo::ViewManagerClientPtr client) {
|
| if (!pending_embeds_.count(pending_embed.get()))
|
| return;
|
|
|
| - allow_embed = allow_embed && CanEmbed(pending_embed->view_id);
|
| + const bool allow_embed = client.get() && CanEmbed(pending_embed->view_id);
|
| if (allow_embed) {
|
| PrepareForEmbed(pending_embed->view_id);
|
| - connection_manager_->EmbedAtView(id_, pending_embed->url_request.Pass(),
|
| - pending_embed->view_id, services.Pass(),
|
| - exposed_services.Pass());
|
| + connection_manager_->EmbedAtView(id_, pending_embed->view_id,
|
| + client.Pass());
|
| }
|
| RemovePendingEmbedAndNotifyCallback(pending_embed.get(), allow_embed);
|
| }
|
| @@ -733,23 +712,8 @@ void ViewManagerServiceImpl::SetViewProperty(
|
| callback.Run(success);
|
| }
|
|
|
| -void ViewManagerServiceImpl::EmbedRequest(
|
| - mojo::URLRequestPtr request,
|
| - Id transport_view_id,
|
| - InterfaceRequest<ServiceProvider> services,
|
| - ServiceProviderPtr exposed_services,
|
| - const Callback<void(bool)>& callback) {
|
| - Embed(request.Pass(), ViewIdFromTransportId(transport_view_id),
|
| - EmbedType::NO_REEMBED, services.Pass(), exposed_services.Pass(),
|
| - callback);
|
| -}
|
| -
|
| -void ViewManagerServiceImpl::EmbedAllowingReembed(
|
| - mojo::URLRequestPtr request,
|
| - mojo::Id transport_view_id,
|
| - const mojo::Callback<void(bool)>& callback) {
|
| - Embed(request.Pass(), ViewIdFromTransportId(transport_view_id),
|
| - EmbedType::ALLOW_REEMBED, nullptr, nullptr, callback);
|
| +void ViewManagerServiceImpl::SetEmbedRoot() {
|
| + is_embed_root_ = true;
|
| }
|
|
|
| void ViewManagerServiceImpl::Embed(mojo::Id transport_view_id,
|
| @@ -758,6 +722,14 @@ void ViewManagerServiceImpl::Embed(mojo::Id transport_view_id,
|
| callback.Run(Embed(ViewIdFromTransportId(transport_view_id), client.Pass()));
|
| }
|
|
|
| +void ViewManagerServiceImpl::EmbedAllowingReembed(
|
| + mojo::Id transport_view_id,
|
| + mojo::URLRequestPtr request,
|
| + const mojo::Callback<void(bool)>& callback) {
|
| + EmbedAllowingReembed(ViewIdFromTransportId(transport_view_id), request.Pass(),
|
| + callback);
|
| +}
|
| +
|
| void ViewManagerServiceImpl::SetFocus(uint32_t view_id,
|
| const SetFocusCallback& callback) {
|
| ServerView* view = GetView(ViewIdFromTransportId(view_id));
|
|
|