Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(184)

Side by Side Diff: extensions/browser/guest_view/guest_view_base.cc

Issue 823543003: AppView: Fix owner_extension_id (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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 "components/ui/zoom/zoom_controller.h" 9 #include "components/ui/zoom/zoom_controller.h"
10 #include "content/public/browser/navigation_details.h" 10 #include "content/public/browser/navigation_details.h"
11 #include "content/public/browser/render_frame_host.h" 11 #include "content/public/browser/render_frame_host.h"
12 #include "content/public/browser/render_process_host.h" 12 #include "content/public/browser/render_process_host.h"
13 #include "content/public/browser/render_view_host.h" 13 #include "content/public/browser/render_view_host.h"
14 #include "content/public/browser/web_contents.h" 14 #include "content/public/browser/web_contents.h"
15 #include "content/public/common/page_zoom.h" 15 #include "content/public/common/page_zoom.h"
16 #include "content/public/common/url_constants.h" 16 #include "content/public/common/url_constants.h"
17 #include "extensions/browser/api/extensions_api_client.h" 17 #include "extensions/browser/api/extensions_api_client.h"
18 #include "extensions/browser/event_router.h" 18 #include "extensions/browser/event_router.h"
19 #include "extensions/browser/extension_registry.h" 19 #include "extensions/browser/extension_registry.h"
20 #include "extensions/browser/guest_view/app_view/app_view_guest.h" 20 #include "extensions/browser/guest_view/app_view/app_view_guest.h"
21 #include "extensions/browser/guest_view/extension_options/extension_options_gues t.h" 21 #include "extensions/browser/guest_view/extension_options/extension_options_gues t.h"
22 #include "extensions/browser/guest_view/guest_view_manager.h" 22 #include "extensions/browser/guest_view/guest_view_manager.h"
23 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h" 23 #include "extensions/browser/guest_view/mime_handler_view/mime_handler_view_gues t.h"
24 #include "extensions/browser/guest_view/surface_worker/surface_worker_guest.h" 24 #include "extensions/browser/guest_view/surface_worker/surface_worker_guest.h"
25 #include "extensions/browser/guest_view/web_view/web_view_guest.h" 25 #include "extensions/browser/guest_view/web_view/web_view_guest.h"
26 #include "extensions/browser/process_manager.h"
26 #include "extensions/browser/process_map.h" 27 #include "extensions/browser/process_map.h"
27 #include "extensions/common/extension_messages.h" 28 #include "extensions/common/extension_messages.h"
28 #include "extensions/common/features/feature.h" 29 #include "extensions/common/features/feature.h"
29 #include "extensions/common/features/feature_provider.h" 30 #include "extensions/common/features/feature_provider.h"
30 #include "extensions/common/guest_view/guest_view_constants.h" 31 #include "extensions/common/guest_view/guest_view_constants.h"
31 #include "third_party/WebKit/public/web/WebInputEvent.h" 32 #include "third_party/WebKit/public/web/WebInputEvent.h"
32 33
33 using content::WebContents; 34 using content::WebContents;
34 35
35 namespace content { 36 namespace content {
(...skipping 107 matching lines...) Expand 10 before | Expand all | Expand 10 after
143 guest_instance_id_(guest_instance_id), 144 guest_instance_id_(guest_instance_id),
144 view_instance_id_(guestview::kInstanceIDNone), 145 view_instance_id_(guestview::kInstanceIDNone),
145 element_instance_id_(guestview::kInstanceIDNone), 146 element_instance_id_(guestview::kInstanceIDNone),
146 initialized_(false), 147 initialized_(false),
147 is_being_destroyed_(false), 148 is_being_destroyed_(false),
148 auto_size_enabled_(false), 149 auto_size_enabled_(false),
149 is_full_page_plugin_(false), 150 is_full_page_plugin_(false),
150 weak_ptr_factory_(this) { 151 weak_ptr_factory_(this) {
151 } 152 }
152 153
153 void GuestViewBase::Init(const std::string& owner_extension_id, 154 void GuestViewBase::Init(const base::DictionaryValue& create_params,
154 const base::DictionaryValue& create_params,
155 const WebContentsCreatedCallback& callback) { 155 const WebContentsCreatedCallback& callback) {
156 if (initialized_) 156 if (initialized_)
157 return; 157 return;
158 initialized_ = true; 158 initialized_ = true;
159 159
160 const Feature* feature = FeatureProvider::GetAPIFeature(GetAPINamespace()); 160 const Feature* feature = FeatureProvider::GetAPIFeature(GetAPINamespace());
161 CHECK(feature); 161 CHECK(feature);
162 162
163 ProcessMap* process_map = ProcessMap::Get(browser_context()); 163 ProcessMap* process_map = ProcessMap::Get(browser_context());
164 CHECK(process_map); 164 CHECK(process_map);
165 165
166 const Extension* embedder_extension = ExtensionRegistry::Get(browser_context_) 166 const Extension* owner_extension =
167 ->enabled_extensions() 167 ProcessManager::Get(owner_web_contents()->GetBrowserContext())->
168 .GetByID(owner_extension_id); 168 GetExtensionForRenderViewHost(
169 owner_web_contents()->GetRenderViewHost());
170 owner_extension_id_ = owner_extension ? owner_extension->id() : std::string();
169 171
170 // Ok for |embedder_extension| to be NULL, the embedder might be WebUI. 172 // Ok for |owner_extension| to be NULL, the embedder might be WebUI.
171 Feature::Availability availability = feature->IsAvailableToContext( 173 Feature::Availability availability = feature->IsAvailableToContext(
172 embedder_extension, 174 owner_extension,
173 process_map->GetMostLikelyContextType( 175 process_map->GetMostLikelyContextType(
174 embedder_extension, 176 owner_extension,
175 owner_web_contents()->GetRenderProcessHost()->GetID()), 177 owner_web_contents()->GetRenderProcessHost()->GetID()),
176 GetOwnerSiteURL()); 178 GetOwnerSiteURL());
177 if (!availability.is_available()) { 179 if (!availability.is_available()) {
178 // The derived class did not create a WebContents so this class serves no 180 // The derived class did not create a WebContents so this class serves no
179 // purpose. Let's self-destruct. 181 // purpose. Let's self-destruct.
180 delete this; 182 delete this;
181 callback.Run(NULL); 183 callback.Run(NULL);
182 return; 184 return;
183 } 185 }
184 186
185 CreateWebContents(create_params, 187 CreateWebContents(create_params,
186 base::Bind(&GuestViewBase::CompleteInit, 188 base::Bind(&GuestViewBase::CompleteInit,
187 weak_ptr_factory_.GetWeakPtr(), 189 weak_ptr_factory_.GetWeakPtr(),
188 owner_extension_id,
189 callback)); 190 callback));
190 } 191 }
191 192
192 void GuestViewBase::InitWithWebContents( 193 void GuestViewBase::InitWithWebContents(
193 const std::string& owner_extension_id,
194 content::WebContents* guest_web_contents) { 194 content::WebContents* guest_web_contents) {
195 DCHECK(guest_web_contents); 195 DCHECK(guest_web_contents);
196 196
197 owner_extension_id_ = owner_extension_id;
198
199 // At this point, we have just created the guest WebContents, we need to add 197 // At this point, we have just created the guest WebContents, we need to add
200 // an observer to the embedder WebContents. This observer will be responsible 198 // an observer to the embedder WebContents. This observer will be responsible
201 // for destroying the guest WebContents if the embedder goes away. 199 // for destroying the guest WebContents if the embedder goes away.
202 owner_lifetime_observer_.reset( 200 owner_lifetime_observer_.reset(
203 new OwnerLifetimeObserver(this, owner_web_contents_)); 201 new OwnerLifetimeObserver(this, owner_web_contents_));
204 202
205 WebContentsObserver::Observe(guest_web_contents); 203 WebContentsObserver::Observe(guest_web_contents);
206 guest_web_contents->SetDelegate(this); 204 guest_web_contents->SetDelegate(this);
207 webcontents_guestview_map.Get().insert( 205 webcontents_guestview_map.Get().insert(
208 std::make_pair(guest_web_contents, this)); 206 std::make_pair(guest_web_contents, this));
(...skipping 326 matching lines...) Expand 10 before | Expand all | Expand 10 after
535 void GuestViewBase::SendQueuedEvents() { 533 void GuestViewBase::SendQueuedEvents() {
536 if (!attached()) 534 if (!attached())
537 return; 535 return;
538 while (!pending_events_.empty()) { 536 while (!pending_events_.empty()) {
539 linked_ptr<Event> event_ptr = pending_events_.front(); 537 linked_ptr<Event> event_ptr = pending_events_.front();
540 pending_events_.pop_front(); 538 pending_events_.pop_front();
541 DispatchEventToEmbedder(event_ptr.release()); 539 DispatchEventToEmbedder(event_ptr.release());
542 } 540 }
543 } 541 }
544 542
545 void GuestViewBase::CompleteInit(const std::string& owner_extension_id, 543 void GuestViewBase::CompleteInit(const WebContentsCreatedCallback& callback,
546 const WebContentsCreatedCallback& callback,
547 content::WebContents* guest_web_contents) { 544 content::WebContents* guest_web_contents) {
548 if (!guest_web_contents) { 545 if (!guest_web_contents) {
549 // The derived class did not create a WebContents so this class serves no 546 // The derived class did not create a WebContents so this class serves no
550 // purpose. Let's self-destruct. 547 // purpose. Let's self-destruct.
551 delete this; 548 delete this;
552 callback.Run(NULL); 549 callback.Run(NULL);
553 return; 550 return;
554 } 551 }
555 InitWithWebContents(owner_extension_id, guest_web_contents); 552 InitWithWebContents(guest_web_contents);
556 callback.Run(guest_web_contents); 553 callback.Run(guest_web_contents);
557 } 554 }
558 555
559 void GuestViewBase::StartTrackingEmbedderZoomLevel() { 556 void GuestViewBase::StartTrackingEmbedderZoomLevel() {
560 if (!ZoomPropagatesFromEmbedderToGuest()) 557 if (!ZoomPropagatesFromEmbedderToGuest())
561 return; 558 return;
562 559
563 ui_zoom::ZoomController* zoom_controller = 560 ui_zoom::ZoomController* zoom_controller =
564 ui_zoom::ZoomController::FromWebContents(owner_web_contents()); 561 ui_zoom::ZoomController::FromWebContents(owner_web_contents());
565 // Chrome Apps do not have a ZoomController. 562 // Chrome Apps do not have a ZoomController.
(...skipping 20 matching lines...) Expand all
586 // static 583 // static
587 void GuestViewBase::RegisterGuestViewTypes() { 584 void GuestViewBase::RegisterGuestViewTypes() {
588 AppViewGuest::Register(); 585 AppViewGuest::Register();
589 ExtensionOptionsGuest::Register(); 586 ExtensionOptionsGuest::Register();
590 MimeHandlerViewGuest::Register(); 587 MimeHandlerViewGuest::Register();
591 SurfaceWorkerGuest::Register(); 588 SurfaceWorkerGuest::Register();
592 WebViewGuest::Register(); 589 WebViewGuest::Register();
593 } 590 }
594 591
595 } // namespace extensions 592 } // namespace extensions
OLDNEW
« no previous file with comments | « extensions/browser/guest_view/guest_view_base.h ('k') | extensions/browser/guest_view/guest_view_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698