| OLD | NEW |
| 1 // Copyright 2014 The Chromium Authors. All rights reserved. | 1 // Copyright 2014 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/view_manager/public/cpp/lib/view_manager_client_impl.h" | 5 #include "components/view_manager/public/cpp/lib/view_manager_client_impl.h" |
| 6 | 6 |
| 7 #include "components/view_manager/public/cpp/lib/view_private.h" | 7 #include "components/view_manager/public/cpp/lib/view_private.h" |
| 8 #include "components/view_manager/public/cpp/util.h" | 8 #include "components/view_manager/public/cpp/util.h" |
| 9 #include "components/view_manager/public/cpp/view_manager_delegate.h" | 9 #include "components/view_manager/public/cpp/view_manager_delegate.h" |
| 10 #include "components/view_manager/public/cpp/view_observer.h" | 10 #include "components/view_manager/public/cpp/view_observer.h" |
| (...skipping 184 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 195 Id view_id, | 195 Id view_id, |
| 196 const std::string& name, | 196 const std::string& name, |
| 197 const std::vector<uint8_t>& data) { | 197 const std::vector<uint8_t>& data) { |
| 198 DCHECK(service_); | 198 DCHECK(service_); |
| 199 service_->SetViewProperty(view_id, | 199 service_->SetViewProperty(view_id, |
| 200 String(name), | 200 String(name), |
| 201 Array<uint8_t>::From(data), | 201 Array<uint8_t>::From(data), |
| 202 ActionCompletedCallback()); | 202 ActionCompletedCallback()); |
| 203 } | 203 } |
| 204 | 204 |
| 205 void ViewManagerClientImpl::Embed(const String& url, Id view_id) { | |
| 206 mojo::URLRequestPtr request(mojo::URLRequest::New()); | |
| 207 request->url = mojo::String::From(url); | |
| 208 Embed(request.Pass(), view_id, nullptr, nullptr); | |
| 209 } | |
| 210 | |
| 211 void ViewManagerClientImpl::Embed(mojo::URLRequestPtr request, | |
| 212 Id view_id, | |
| 213 InterfaceRequest<ServiceProvider> services, | |
| 214 ServiceProviderPtr exposed_services) { | |
| 215 DCHECK(service_); | |
| 216 service_->EmbedRequest(request.Pass(), view_id, services.Pass(), | |
| 217 exposed_services.Pass(), ActionCompletedCallback()); | |
| 218 } | |
| 219 | |
| 220 void ViewManagerClientImpl::Embed(Id view_id, ViewManagerClientPtr client) { | 205 void ViewManagerClientImpl::Embed(Id view_id, ViewManagerClientPtr client) { |
| 221 DCHECK(service_); | 206 DCHECK(service_); |
| 222 service_->Embed(view_id, client.Pass(), ActionCompletedCallback()); | 207 service_->Embed(view_id, client.Pass(), ActionCompletedCallback()); |
| 223 } | 208 } |
| 224 | 209 |
| 225 void ViewManagerClientImpl::EmbedAllowingReembed(mojo::URLRequestPtr request, | 210 void ViewManagerClientImpl::EmbedAllowingReembed(mojo::URLRequestPtr request, |
| 226 Id view_id) { | 211 Id view_id) { |
| 227 DCHECK(service_); | 212 DCHECK(service_); |
| 228 service_->EmbedAllowingReembed(request.Pass(), view_id, | 213 service_->EmbedAllowingReembed(view_id, request.Pass(), |
| 229 ActionCompletedCallback()); | 214 ActionCompletedCallback()); |
| 230 } | 215 } |
| 231 | 216 |
| 232 void ViewManagerClientImpl::AddView(View* view) { | 217 void ViewManagerClientImpl::AddView(View* view) { |
| 233 DCHECK(views_.find(view->id()) == views_.end()); | 218 DCHECK(views_.find(view->id()) == views_.end()); |
| 234 views_[view->id()] = view; | 219 views_[view->id()] = view; |
| 235 } | 220 } |
| 236 | 221 |
| 237 void ViewManagerClientImpl::RemoveView(Id view_id) { | 222 void ViewManagerClientImpl::RemoveView(Id view_id) { |
| 238 if (focused_view_ && focused_view_->id() == view_id) | 223 if (focused_view_ && focused_view_->id() == view_id) |
| (...skipping 16 matching lines...) Expand all Loading... |
| 255 | 240 |
| 256 Id ViewManagerClientImpl::CreateViewOnServer() { | 241 Id ViewManagerClientImpl::CreateViewOnServer() { |
| 257 DCHECK(service_); | 242 DCHECK(service_); |
| 258 const Id view_id = MakeTransportId(connection_id_, ++next_id_); | 243 const Id view_id = MakeTransportId(connection_id_, ++next_id_); |
| 259 service_->CreateView(view_id, [this](ErrorCode code) { | 244 service_->CreateView(view_id, [this](ErrorCode code) { |
| 260 OnActionCompleted(code == ERROR_CODE_NONE); | 245 OnActionCompleted(code == ERROR_CODE_NONE); |
| 261 }); | 246 }); |
| 262 return view_id; | 247 return view_id; |
| 263 } | 248 } |
| 264 | 249 |
| 265 const std::string& ViewManagerClientImpl::GetEmbedderURL() const { | |
| 266 return creator_url_; | |
| 267 } | |
| 268 | |
| 269 View* ViewManagerClientImpl::GetRoot() { | 250 View* ViewManagerClientImpl::GetRoot() { |
| 270 return root_; | 251 return root_; |
| 271 } | 252 } |
| 272 | 253 |
| 273 View* ViewManagerClientImpl::GetViewById(Id id) { | 254 View* ViewManagerClientImpl::GetViewById(Id id) { |
| 274 IdToViewMap::const_iterator it = views_.find(id); | 255 IdToViewMap::const_iterator it = views_.find(id); |
| 275 return it != views_.end() ? it->second : NULL; | 256 return it != views_.end() ? it->second : NULL; |
| 276 } | 257 } |
| 277 | 258 |
| 278 View* ViewManagerClientImpl::GetFocusedView() { | 259 View* ViewManagerClientImpl::GetFocusedView() { |
| 279 return focused_view_; | 260 return focused_view_; |
| 280 } | 261 } |
| 281 | 262 |
| 282 View* ViewManagerClientImpl::CreateView() { | 263 View* ViewManagerClientImpl::CreateView() { |
| 283 View* view = new View(this, CreateViewOnServer()); | 264 View* view = new View(this, CreateViewOnServer()); |
| 284 AddView(view); | 265 AddView(view); |
| 285 return view; | 266 return view; |
| 286 } | 267 } |
| 287 | 268 |
| 288 void ViewManagerClientImpl::SetEmbedRoot() { | 269 void ViewManagerClientImpl::SetEmbedRoot() { |
| 289 // TODO(sky): this isn't right. The server may ignore the call. | 270 // TODO(sky): this isn't right. The server may ignore the call. |
| 290 is_embed_root_ = true; | 271 is_embed_root_ = true; |
| 291 service_->SetEmbedRoot(); | 272 service_->SetEmbedRoot(); |
| 292 } | 273 } |
| 293 | 274 |
| 294 //////////////////////////////////////////////////////////////////////////////// | 275 //////////////////////////////////////////////////////////////////////////////// |
| 295 // ViewManagerClientImpl, ViewManagerClient implementation: | 276 // ViewManagerClientImpl, ViewManagerClient implementation: |
| 296 | 277 |
| 297 void ViewManagerClientImpl::OnEmbed(ConnectionSpecificId connection_id, | 278 void ViewManagerClientImpl::OnEmbed(ConnectionSpecificId connection_id, |
| 298 const String& creator_url, | |
| 299 ViewDataPtr root_data, | 279 ViewDataPtr root_data, |
| 300 ViewManagerServicePtr view_manager_service, | 280 ViewManagerServicePtr view_manager_service, |
| 301 InterfaceRequest<ServiceProvider> services, | |
| 302 ServiceProviderPtr exposed_services, | |
| 303 Id focused_view_id) { | 281 Id focused_view_id) { |
| 304 if (view_manager_service) { | 282 if (view_manager_service) { |
| 305 DCHECK(!service_); | 283 DCHECK(!service_); |
| 306 service_ = view_manager_service.Pass(); | 284 service_ = view_manager_service.Pass(); |
| 307 service_.set_error_handler(this); | 285 service_.set_error_handler(this); |
| 308 } | 286 } |
| 309 connection_id_ = connection_id; | 287 connection_id_ = connection_id; |
| 310 creator_url_ = String::From(creator_url); | |
| 311 | 288 |
| 312 DCHECK(!root_); | 289 DCHECK(!root_); |
| 313 root_ = AddViewToViewManager(this, nullptr, root_data); | 290 root_ = AddViewToViewManager(this, nullptr, root_data); |
| 314 root_observer_.reset(new RootObserver(root_)); | 291 root_observer_.reset(new RootObserver(root_)); |
| 315 | 292 |
| 316 focused_view_ = GetViewById(focused_view_id); | 293 focused_view_ = GetViewById(focused_view_id); |
| 317 | 294 |
| 318 delegate_->OnEmbed(root_, services.Pass(), exposed_services.Pass()); | 295 delegate_->OnEmbed(root_); |
| 319 } | 296 } |
| 320 | 297 |
| 321 void ViewManagerClientImpl::OnWillEmbed( | 298 void ViewManagerClientImpl::OnEmbedForDescendant( |
| 322 Id view_id, | 299 Id view_id, |
| 323 InterfaceRequest<ServiceProvider> services, | 300 mojo::URLRequestPtr request, |
| 324 ServiceProviderPtr exposed_services, | 301 const OnEmbedForDescendantCallback& callback) { |
| 325 const OnWillEmbedCallback& callback) { | |
| 326 View* view = GetViewById(view_id); | 302 View* view = GetViewById(view_id); |
| 327 bool allow_embed = false; | 303 ViewManagerClientPtr client; |
| 328 if (view) | 304 if (view) |
| 329 allow_embed = delegate_->OnWillEmbed(view, &services, &exposed_services); | 305 delegate_->OnEmbedForDescendant(view, request.Pass(), &client); |
| 330 callback.Run(allow_embed, services.Pass(), exposed_services.Pass()); | 306 callback.Run(client.Pass()); |
| 331 } | 307 } |
| 332 | 308 |
| 333 void ViewManagerClientImpl::OnEmbeddedAppDisconnected(Id view_id) { | 309 void ViewManagerClientImpl::OnEmbeddedAppDisconnected(Id view_id) { |
| 334 View* view = GetViewById(view_id); | 310 View* view = GetViewById(view_id); |
| 335 if (view) { | 311 if (view) { |
| 336 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(view).observers(), | 312 FOR_EACH_OBSERVER(ViewObserver, *ViewPrivate(view).observers(), |
| 337 OnViewEmbeddedAppDisconnected(view)); | 313 OnViewEmbeddedAppDisconnected(view)); |
| 338 } | 314 } |
| 339 } | 315 } |
| 340 | 316 |
| (...skipping 136 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 477 void ViewManagerClientImpl::OnActionCompleted(bool success) { | 453 void ViewManagerClientImpl::OnActionCompleted(bool success) { |
| 478 if (!change_acked_callback_.is_null()) | 454 if (!change_acked_callback_.is_null()) |
| 479 change_acked_callback_.Run(); | 455 change_acked_callback_.Run(); |
| 480 } | 456 } |
| 481 | 457 |
| 482 Callback<void(bool)> ViewManagerClientImpl::ActionCompletedCallback() { | 458 Callback<void(bool)> ViewManagerClientImpl::ActionCompletedCallback() { |
| 483 return [this](bool success) { OnActionCompleted(success); }; | 459 return [this](bool success) { OnActionCompleted(success); }; |
| 484 } | 460 } |
| 485 | 461 |
| 486 } // namespace mojo | 462 } // namespace mojo |
| OLD | NEW |