| Index: chrome/browser/extensions/api/guest_view/guest_view_internal_api.cc
|
| diff --git a/chrome/browser/extensions/api/guest_view/guest_view_internal_api.cc b/chrome/browser/extensions/api/guest_view/guest_view_internal_api.cc
|
| index 8e16381fd0a0aa2c922d7c919c2d49bc976f5172..6496b08f43b91e1f8afeff84c6f95abd47147500 100644
|
| --- a/chrome/browser/extensions/api/guest_view/guest_view_internal_api.cc
|
| +++ b/chrome/browser/extensions/api/guest_view/guest_view_internal_api.cc
|
| @@ -4,27 +4,44 @@
|
|
|
| #include "chrome/browser/extensions/api/guest_view/guest_view_internal_api.h"
|
|
|
| +#include "chrome/browser/guest_view/guest_view_base.h"
|
| #include "chrome/browser/guest_view/guest_view_manager.h"
|
| #include "chrome/browser/profiles/profile.h"
|
| #include "chrome/common/extensions/api/guest_view_internal.h"
|
| +#include "content/public/browser/render_process_host.h"
|
| +#include "content/public/browser/render_view_host.h"
|
| #include "extensions/common/permissions/permissions_data.h"
|
|
|
| namespace extensions {
|
|
|
| -GuestViewInternalAllocateInstanceIdFunction::
|
| - GuestViewInternalAllocateInstanceIdFunction() {
|
| +GuestViewInternalCreateGuestFunction::
|
| + GuestViewInternalCreateGuestFunction() {
|
| }
|
|
|
| -bool GuestViewInternalAllocateInstanceIdFunction::RunAsync() {
|
| - EXTENSION_FUNCTION_VALIDATE(!args_->GetSize());
|
| +bool GuestViewInternalCreateGuestFunction::RunAsync() {
|
| + std::string view_type;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetString(0, &view_type));
|
| +
|
| + base::DictionaryValue* create_params;
|
| + EXTENSION_FUNCTION_VALIDATE(args_->GetDictionary(1, &create_params));
|
|
|
| // Check if we have "webview" permission.
|
| CHECK(GetExtension()->permissions_data()->HasAPIPermission(
|
| APIPermission::kWebView));
|
|
|
| - int instanceId = GuestViewManager::FromBrowserContext(browser_context())
|
| - ->GetNextInstanceID();
|
| - SetResult(base::Value::CreateIntegerValue(instanceId));
|
| + GuestViewManager* guest_view_manager =
|
| + GuestViewManager::FromBrowserContext(browser_context());
|
| +
|
| + content::WebContents* guest_web_contents =
|
| + guest_view_manager->CreateGuest(view_type,
|
| + extension_id(),
|
| + render_view_host()->GetProcess()->GetID(),
|
| + *create_params);
|
| + if (!guest_web_contents)
|
| + return false;
|
| +
|
| + GuestViewBase* guest = GuestViewBase::FromWebContents(guest_web_contents);
|
| + SetResult(base::Value::CreateIntegerValue(guest->GetGuestInstanceID()));
|
| SendResponse(true);
|
| return true;
|
| }
|
|
|