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
3 // found in the LICENSE file.
5 #include "extensions/browser/api/guest_view/guest_view_internal_api.h"
7 #include "content/public/browser/render_process_host.h"
8 #include "content/public/browser/render_view_host.h"
9 #include "extensions/browser/guest_view/guest_view_base.h"
10 #include "extensions/browser/guest_view/guest_view_manager.h"
11 #include "extensions/common/api/guest_view_internal.h"
12 #include "extensions/common/permissions/permissions_data.h"
14 namespace guest_view_internal = extensions::core_api::guest_view_internal;
16 namespace extensions {
18 GuestViewInternalCreateGuestFunction::
19 GuestViewInternalCreateGuestFunction() {
22 bool GuestViewInternalCreateGuestFunction::RunAsync() {
23 std::string view_type;
24 EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &view_type));
26 base::DictionaryValue* create_params;
27 EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &create_params));
29 GuestViewManager* guest_view_manager =
30 GuestViewManager::FromBrowserContext(browser_context());
32 GuestViewManager::WebContentsCreatedCallback callback =
33 base::Bind(&GuestViewInternalCreateGuestFunction::CreateGuestCallback,
36 content::WebContents* embedder_web_contents =
37 content::WebContents::FromRenderViewHost(render_view_host());
38 if (!embedder_web_contents) {
39 error_ = "Guest views can only be embedded in web content";
42 // If the guest is an <extensionoptions> to be embedded in a WebUI, then
43 // there is no extension, and extension() will be null. Use an empty string
45 std::string embedder_extension_id;
47 embedder_extension_id = extension_id();
49 guest_view_manager->CreateGuest(view_type,
50 embedder_extension_id,
51 embedder_web_contents,
57 void GuestViewInternalCreateGuestFunction::CreateGuestCallback(
58 content::WebContents* guest_web_contents) {
59 int guest_instance_id = 0;
60 if (guest_web_contents) {
61 GuestViewBase* guest = GuestViewBase::FromWebContents(guest_web_contents);
62 guest_instance_id = guest->guest_instance_id();
64 SetResult(new base::FundamentalValue(guest_instance_id));
68 GuestViewInternalSetAutoSizeFunction::
69 GuestViewInternalSetAutoSizeFunction() {
72 GuestViewInternalSetAutoSizeFunction::
73 ~GuestViewInternalSetAutoSizeFunction() {
76 bool GuestViewInternalSetAutoSizeFunction::RunAsync() {
77 scoped_ptr<guest_view_internal::SetAutoSize::Params> params(
78 guest_view_internal::SetAutoSize::Params::Create(*args_));
79 EXTENSION_FUNCTION_VALIDATE(params.get());
80 GuestViewBase* guest = GuestViewBase::From(
81 render_view_host()->GetProcess()->GetID(), params->instance_id);
84 guest->SetAutoSize(params->params.enable_auto_size,
85 gfx::Size(params->params.min.width,
86 params->params.min.height),
87 gfx::Size(params->params.max.width,
88 params->params.max.height));
93 } // namespace extensions