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
* sender_web_contents
= GetSenderWebContents();
37 if (!sender_web_contents
) {
38 error_
= "Guest views can only be embedded in web content";
42 guest_view_manager
->CreateGuest(view_type
,
49 void GuestViewInternalCreateGuestFunction::CreateGuestCallback(
50 content::WebContents
* guest_web_contents
) {
51 int guest_instance_id
= 0;
52 if (guest_web_contents
) {
53 GuestViewBase
* guest
= GuestViewBase::FromWebContents(guest_web_contents
);
54 guest_instance_id
= guest
->guest_instance_id();
56 SetResult(new base::FundamentalValue(guest_instance_id
));
60 GuestViewInternalDestroyGuestFunction::
61 GuestViewInternalDestroyGuestFunction() {
64 GuestViewInternalDestroyGuestFunction::
65 ~GuestViewInternalDestroyGuestFunction() {
68 bool GuestViewInternalDestroyGuestFunction::RunAsync() {
69 scoped_ptr
<guest_view_internal::DestroyGuest::Params
> params(
70 guest_view_internal::DestroyGuest::Params::Create(*args_
));
71 EXTENSION_FUNCTION_VALIDATE(params
.get());
72 GuestViewBase
* guest
= GuestViewBase::From(
73 render_view_host()->GetProcess()->GetID(), params
->instance_id
);
81 GuestViewInternalSetSizeFunction::GuestViewInternalSetSizeFunction() {
84 GuestViewInternalSetSizeFunction::~GuestViewInternalSetSizeFunction() {
87 bool GuestViewInternalSetSizeFunction::RunAsync() {
88 scoped_ptr
<guest_view_internal::SetSize::Params
> params(
89 guest_view_internal::SetSize::Params::Create(*args_
));
90 EXTENSION_FUNCTION_VALIDATE(params
.get());
91 GuestViewBase
* guest
= GuestViewBase::From(
92 render_view_host()->GetProcess()->GetID(), params
->instance_id
);
96 SetSizeParams set_size_params
;
97 if (params
->params
.enable_auto_size
) {
98 set_size_params
.enable_auto_size
.reset(
99 params
->params
.enable_auto_size
.release());
101 if (params
->params
.min
) {
102 set_size_params
.min_size
.reset(
103 new gfx::Size(params
->params
.min
->width
, params
->params
.min
->height
));
105 if (params
->params
.max
) {
106 set_size_params
.max_size
.reset(
107 new gfx::Size(params
->params
.max
->width
, params
->params
.max
->height
));
109 if (params
->params
.normal
) {
110 set_size_params
.normal_size
.reset(new gfx::Size(
111 params
->params
.normal
->width
, params
->params
.normal
->height
));
114 guest
->SetSize(set_size_params
);
119 } // namespace extensions