ozone: evdev: Sync caps lock LED state to evdev
[chromium-blink-merge.git] / extensions / browser / api / guest_view / guest_view_internal_api.cc
blob0191220cdbd100b7b8481a89cf06288e89c7b54a
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,
34 this);
36 content::WebContents* sender_web_contents = GetSenderWebContents();
37 if (!sender_web_contents) {
38 error_ = "Guest views can only be embedded in web content";
39 return false;
42 guest_view_manager->CreateGuest(view_type,
43 sender_web_contents,
44 *create_params,
45 callback);
46 return true;
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));
57 SendResponse(true);
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);
74 if (!guest)
75 return false;
76 guest->Destroy();
77 SendResponse(true);
78 return true;
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);
93 if (!guest)
94 return false;
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);
115 SendResponse(true);
116 return true;
119 } // namespace extensions