| 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 "extensions/browser/guest_view/guest_view_base.h" | 5 #include "extensions/browser/guest_view/guest_view_base.h" |
| 6 | 6 |
| 7 #include "base/lazy_instance.h" | 7 #include "base/lazy_instance.h" |
| 8 #include "base/strings/utf_string_conversions.h" | 8 #include "base/strings/utf_string_conversions.h" |
| 9 #include "content/public/browser/render_frame_host.h" | 9 #include "content/public/browser/render_frame_host.h" |
| 10 #include "content/public/browser/render_process_host.h" | 10 #include "content/public/browser/render_process_host.h" |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 101 } | 101 } |
| 102 | 102 |
| 103 void GuestViewBase::Init(const std::string& embedder_extension_id, | 103 void GuestViewBase::Init(const std::string& embedder_extension_id, |
| 104 content::WebContents* embedder_web_contents, | 104 content::WebContents* embedder_web_contents, |
| 105 const base::DictionaryValue& create_params, | 105 const base::DictionaryValue& create_params, |
| 106 const WebContentsCreatedCallback& callback) { | 106 const WebContentsCreatedCallback& callback) { |
| 107 if (initialized_) | 107 if (initialized_) |
| 108 return; | 108 return; |
| 109 initialized_ = true; | 109 initialized_ = true; |
| 110 | 110 |
| 111 extensions::Feature* feature = | 111 Feature* feature = FeatureProvider::GetAPIFeatures()->GetFeature( |
| 112 extensions::FeatureProvider::GetAPIFeatures()->GetFeature( | 112 GetAPINamespace()); |
| 113 GetAPINamespace()); | |
| 114 CHECK(feature); | 113 CHECK(feature); |
| 115 | 114 |
| 116 extensions::ProcessMap* process_map = | 115 ProcessMap* process_map = ProcessMap::Get(browser_context()); |
| 117 extensions::ProcessMap::Get(browser_context()); | |
| 118 CHECK(process_map); | 116 CHECK(process_map); |
| 119 | 117 |
| 120 const extensions::Extension* embedder_extension = | 118 const Extension* embedder_extension = ExtensionRegistry::Get(browser_context_) |
| 121 extensions::ExtensionRegistry::Get(browser_context_) | |
| 122 ->enabled_extensions() | 119 ->enabled_extensions() |
| 123 .GetByID(embedder_extension_id); | 120 .GetByID(embedder_extension_id); |
| 124 // Ok for |embedder_extension| to be NULL, the embedder might be WebUI. | 121 // Ok for |embedder_extension| to be NULL, the embedder might be WebUI. |
| 125 | 122 |
| 126 CHECK(embedder_web_contents); | 123 CHECK(embedder_web_contents); |
| 127 int embedder_process_id = | 124 int embedder_process_id = |
| 128 embedder_web_contents->GetRenderProcessHost()->GetID(); | 125 embedder_web_contents->GetRenderProcessHost()->GetID(); |
| 129 | 126 |
| 130 extensions::Feature::Availability availability = | 127 Feature::Availability availability = feature->IsAvailableToContext( |
| 131 feature->IsAvailableToContext( | 128 embedder_extension, |
| 132 embedder_extension, | 129 process_map->GetMostLikelyContextType(embedder_extension, |
| 133 process_map->GetMostLikelyContextType(embedder_extension, | 130 embedder_process_id), |
| 134 embedder_process_id), | 131 embedder_web_contents->GetLastCommittedURL()); |
| 135 embedder_web_contents->GetLastCommittedURL()); | |
| 136 if (!availability.is_available()) { | 132 if (!availability.is_available()) { |
| 137 callback.Run(NULL); | 133 callback.Run(NULL); |
| 138 return; | 134 return; |
| 139 } | 135 } |
| 140 | 136 |
| 141 CreateWebContents(embedder_extension_id, | 137 CreateWebContents(embedder_extension_id, |
| 142 embedder_process_id, | 138 embedder_process_id, |
| 143 create_params, | 139 create_params, |
| 144 base::Bind(&GuestViewBase::CompleteInit, | 140 base::Bind(&GuestViewBase::CompleteInit, |
| 145 AsWeakPtr(), | 141 AsWeakPtr(), |
| (...skipping 250 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 396 } | 392 } |
| 397 | 393 |
| 398 void GuestViewBase::DispatchEventToEmbedder(Event* event) { | 394 void GuestViewBase::DispatchEventToEmbedder(Event* event) { |
| 399 scoped_ptr<Event> event_ptr(event); | 395 scoped_ptr<Event> event_ptr(event); |
| 400 | 396 |
| 401 if (!attached()) { | 397 if (!attached()) { |
| 402 pending_events_.push_back(linked_ptr<Event>(event_ptr.release())); | 398 pending_events_.push_back(linked_ptr<Event>(event_ptr.release())); |
| 403 return; | 399 return; |
| 404 } | 400 } |
| 405 | 401 |
| 406 extensions::EventFilteringInfo info; | 402 EventFilteringInfo info; |
| 407 info.SetInstanceID(view_instance_id_); | 403 info.SetInstanceID(view_instance_id_); |
| 408 scoped_ptr<base::ListValue> args(new base::ListValue()); | 404 scoped_ptr<base::ListValue> args(new base::ListValue()); |
| 409 args->Append(event->GetArguments().release()); | 405 args->Append(event->GetArguments().release()); |
| 410 | 406 |
| 411 extensions::EventRouter::DispatchEvent( | 407 EventRouter::DispatchEvent( |
| 412 embedder_web_contents_, | 408 embedder_web_contents_, |
| 413 browser_context_, | 409 browser_context_, |
| 414 embedder_extension_id_, | 410 embedder_extension_id_, |
| 415 event->name(), | 411 event->name(), |
| 416 args.Pass(), | 412 args.Pass(), |
| 417 extensions::EventRouter::USER_GESTURE_UNKNOWN, | 413 EventRouter::USER_GESTURE_UNKNOWN, |
| 418 info); | 414 info); |
| 419 } | 415 } |
| 420 | 416 |
| 421 void GuestViewBase::SendQueuedEvents() { | 417 void GuestViewBase::SendQueuedEvents() { |
| 422 if (!attached()) | 418 if (!attached()) |
| 423 return; | 419 return; |
| 424 while (!pending_events_.empty()) { | 420 while (!pending_events_.empty()) { |
| 425 linked_ptr<Event> event_ptr = pending_events_.front(); | 421 linked_ptr<Event> event_ptr = pending_events_.front(); |
| 426 pending_events_.pop_front(); | 422 pending_events_.pop_front(); |
| 427 DispatchEventToEmbedder(event_ptr.release()); | 423 DispatchEventToEmbedder(event_ptr.release()); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 440 return; | 436 return; |
| 441 } | 437 } |
| 442 InitWithWebContents(embedder_extension_id, | 438 InitWithWebContents(embedder_extension_id, |
| 443 embedder_render_process_id, | 439 embedder_render_process_id, |
| 444 guest_web_contents); | 440 guest_web_contents); |
| 445 callback.Run(guest_web_contents); | 441 callback.Run(guest_web_contents); |
| 446 } | 442 } |
| 447 | 443 |
| 448 // static | 444 // static |
| 449 void GuestViewBase::RegisterGuestViewTypes() { | 445 void GuestViewBase::RegisterGuestViewTypes() { |
| 450 extensions::ExtensionsAPIClient::Get()->RegisterGuestViewTypes(); | 446 ExtensionsAPIClient::Get()->RegisterGuestViewTypes(); |
| 451 } | 447 } |
| 452 | 448 |
| 453 } // namespace extensions | 449 } // namespace extensions |
| OLD | NEW |