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 |