Commit 8db7ed5a authored by Albert Chaulk's avatar Albert Chaulk Committed by Commit Bot

Add incognito contexts for webviews

Test: loaded webview on device in incognito context
Bug: b/167428704

Change-Id: If327a22657fe0e9b989df7cd3bdb8fe8e97a0143
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2388886Reviewed-by: default avatarDaniel Nicoara <dnicoara@chromium.org>
Commit-Queue: Albert Chaulk <achaulk@chromium.org>
Cr-Commit-Position: refs/heads/master@{#813871}
parent 50ade28c
......@@ -446,6 +446,8 @@ cast_source_set("browser") {
"webview/platform_views_rpc_instance.h",
"webview/web_content_controller.cc",
"webview/web_content_controller.h",
"webview/webview_browser_context.cc",
"webview/webview_browser_context.h",
"webview/webview_controller.cc",
"webview/webview_controller.h",
"webview/webview_navigation_throttle.cc",
......
......@@ -26,6 +26,9 @@ message WebviewCreateRequest {
// This is the cast window ID that will be assigned to the web contents
// window.
int32 window_id = 2;
// True if this webview should exist in an incognito context. It will never
// persist state.
bool incognito = 3;
}
message WebviewCreateResponse {
......
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "chromecast/browser/webview/webview_browser_context.h"
#include "base/files/file_path.h"
#include "content/public/browser/resource_context.h"
namespace chromecast {
class WebviewBrowserContext::ResourceContext : public content::ResourceContext {
public:
ResourceContext() {}
~ResourceContext() override {}
ResourceContext(const ResourceContext&) = delete;
void operator=(const ResourceContext&) = delete;
};
WebviewBrowserContext::WebviewBrowserContext(
content::BrowserContext* main_browser_context)
: main_browser_context_(main_browser_context),
resource_context_(std::make_unique<ResourceContext>()) {}
WebviewBrowserContext::~WebviewBrowserContext() {}
base::FilePath WebviewBrowserContext::GetPath() {
return base::FilePath();
}
bool WebviewBrowserContext::IsOffTheRecord() {
return true;
}
content::ResourceContext* WebviewBrowserContext::GetResourceContext() {
return resource_context_.get();
}
content::DownloadManagerDelegate*
WebviewBrowserContext::GetDownloadManagerDelegate() {
return main_browser_context_->GetDownloadManagerDelegate();
}
content::BrowserPluginGuestManager* WebviewBrowserContext::GetGuestManager() {
return nullptr;
}
storage::SpecialStoragePolicy*
WebviewBrowserContext::GetSpecialStoragePolicy() {
return nullptr;
}
content::PushMessagingService*
WebviewBrowserContext::GetPushMessagingService() {
return nullptr;
}
content::StorageNotificationService*
WebviewBrowserContext::GetStorageNotificationService() {
return nullptr;
}
content::SSLHostStateDelegate*
WebviewBrowserContext::GetSSLHostStateDelegate() {
return nullptr;
}
content::PermissionControllerDelegate*
WebviewBrowserContext::GetPermissionControllerDelegate() {
return main_browser_context_->GetPermissionControllerDelegate();
}
content::ClientHintsControllerDelegate*
WebviewBrowserContext::GetClientHintsControllerDelegate() {
return nullptr;
}
content::BackgroundFetchDelegate*
WebviewBrowserContext::GetBackgroundFetchDelegate() {
return nullptr;
}
content::BackgroundSyncController*
WebviewBrowserContext::GetBackgroundSyncController() {
return nullptr;
}
content::BrowsingDataRemoverDelegate*
WebviewBrowserContext::GetBrowsingDataRemoverDelegate() {
return nullptr;
}
content::SharedCorsOriginAccessList*
WebviewBrowserContext::GetSharedCorsOriginAccessList() {
return main_browser_context_->GetSharedCorsOriginAccessList();
}
std::unique_ptr<content::ZoomLevelDelegate>
WebviewBrowserContext::CreateZoomLevelDelegate(const base::FilePath&) {
return nullptr;
}
} // namespace chromecast
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROMECAST_BROWSER_WEBVIEW_WEBVIEW_BROWSER_CONTEXT_H_
#define CHROMECAST_BROWSER_WEBVIEW_WEBVIEW_BROWSER_CONTEXT_H_
#include "content/public/browser/browser_context.h"
namespace chromecast {
// This provides an incognito browser context for webviews to use.
class WebviewBrowserContext : public content::BrowserContext {
public:
explicit WebviewBrowserContext(content::BrowserContext* main_browser_context);
~WebviewBrowserContext() override;
WebviewBrowserContext(const WebviewBrowserContext&) = delete;
void operator=(const WebviewBrowserContext&) = delete;
// BrowserContext implementation:
base::FilePath GetPath() override;
bool IsOffTheRecord() override;
content::ResourceContext* GetResourceContext() override;
content::DownloadManagerDelegate* GetDownloadManagerDelegate() override;
content::BrowserPluginGuestManager* GetGuestManager() override;
storage::SpecialStoragePolicy* GetSpecialStoragePolicy() override;
content::PushMessagingService* GetPushMessagingService() override;
content::StorageNotificationService* GetStorageNotificationService() override;
content::SSLHostStateDelegate* GetSSLHostStateDelegate() override;
content::PermissionControllerDelegate* GetPermissionControllerDelegate()
override;
content::ClientHintsControllerDelegate* GetClientHintsControllerDelegate()
override;
content::BackgroundFetchDelegate* GetBackgroundFetchDelegate() override;
content::BackgroundSyncController* GetBackgroundSyncController() override;
content::BrowsingDataRemoverDelegate* GetBrowsingDataRemoverDelegate()
override;
content::SharedCorsOriginAccessList* GetSharedCorsOriginAccessList() override;
std::unique_ptr<content::ZoomLevelDelegate> CreateZoomLevelDelegate(
const base::FilePath&) override;
private:
class ResourceContext;
content::BrowserContext* main_browser_context_;
std::unique_ptr<ResourceContext> resource_context_;
};
} // namespace chromecast
#endif // CHROMECAST_BROWSER_WEBVIEW_WEBVIEW_BROWSER_CONTEXT_H_
......@@ -9,6 +9,7 @@
#include "chromecast/browser/cast_browser_context.h"
#include "chromecast/browser/cast_browser_process.h"
#include "chromecast/browser/webview/platform_views_rpc_instance.h"
#include "chromecast/browser/webview/webview_browser_context.h"
#include "chromecast/browser/webview/webview_controller.h"
#include "third_party/grpc/src/include/grpcpp/grpcpp.h"
#include "third_party/grpc/src/include/grpcpp/security/server_credentials.h"
......@@ -46,11 +47,14 @@ bool WebviewRpcInstance::Initialize() {
FROM_HERE,
base::BindOnce(&WebviewRpcInstance::CreateWebview, base::Unretained(this),
request_->create().webview_id(),
request_->create().window_id()));
request_->create().window_id(),
request_->create().incognito()));
return true;
}
void WebviewRpcInstance::CreateWebview(int app_id, int window_id) {
void WebviewRpcInstance::CreateWebview(int app_id,
int window_id,
bool incognito) {
app_id_ = app_id;
window_id_ = window_id;
// Only start listening for window events after the Webview is created. It
......@@ -60,6 +64,11 @@ void WebviewRpcInstance::CreateWebview(int app_id, int window_id) {
content::BrowserContext* browser_context =
shell::CastBrowserProcess::GetInstance()->browser_context();
if (incognito) {
incognito_context_ =
std::make_unique<WebviewBrowserContext>(browser_context);
browser_context = incognito_context_.get();
}
controller_ = std::make_unique<WebviewController>(browser_context, this,
enabled_for_dev_);
......
......@@ -9,6 +9,8 @@
namespace chromecast {
class WebviewBrowserContext;
class WebviewRpcInstance : public PlatformViewsRpcInstance {
public:
WebviewRpcInstance(webview::PlatformViewsService::AsyncService* service,
......@@ -23,9 +25,10 @@ class WebviewRpcInstance : public PlatformViewsRpcInstance {
bool Initialize() override;
private:
void CreateWebview(int app_id, int window_id);
void CreateWebview(int app_id, int window_id, bool incognito);
webview::PlatformViewsService::AsyncService* platform_views_service_;
bool enabled_for_dev_ = false;
std::unique_ptr<WebviewBrowserContext> incognito_context_;
DISALLOW_COPY_AND_ASSIGN(WebviewRpcInstance);
};
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment