Commit cbd7dfa0 authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

[WebLayer] Create fake permission controller delegate

This can be used to unblock other features that depend on permissions
while the real permissions implementation is being worked on. It is
enabled by passing the --weblayer-fake-permissions flag.

Bug: 1025609
Change-Id: Ibafe00d47a0b8d84c99e0c1e3029d0a4a55d4922
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1999063Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Cr-Commit-Position: refs/heads/master@{#731650}
parent b9bb2d89
......@@ -102,6 +102,8 @@ jumbo_static_library("weblayer_lib") {
"browser/content_browser_client_impl.h",
"browser/download_manager_delegate_impl.cc",
"browser/download_manager_delegate_impl.h",
"browser/fake_permission_controller_delegate.cc",
"browser/fake_permission_controller_delegate.h",
"browser/file_select_helper.cc",
"browser/file_select_helper.h",
"browser/i18n_util.cc",
......
......@@ -117,7 +117,8 @@ bool ContentMainDelegateImpl::BasicStartupComplete(int* exit_code) {
cl->AppendSwitch(switches::kDisableNotifications);
cl->AppendSwitch(switches::kDisableSpeechSynthesisAPI);
cl->AppendSwitch(switches::kDisableSpeechAPI);
cl->AppendSwitch(switches::kDisablePermissionsAPI);
if (!cl->HasSwitch(switches::kWebLayerFakePermissions))
cl->AppendSwitch(switches::kDisablePermissionsAPI);
cl->AppendSwitch(switches::kDisablePresentationAPI);
cl->AppendSwitch(switches::kDisableRemotePlaybackAPI);
#if defined(OS_ANDROID)
......
......@@ -11,6 +11,8 @@
#include "components/safe_browsing/core/common/safe_browsing_prefs.h"
#include "components/user_prefs/user_prefs.h"
#include "content/public/browser/resource_context.h"
#include "weblayer/browser/fake_permission_controller_delegate.h"
#include "weblayer/public/common/switches.h"
namespace weblayer {
......@@ -84,6 +86,14 @@ content::SSLHostStateDelegate* BrowserContextImpl::GetSSLHostStateDelegate() {
content::PermissionControllerDelegate*
BrowserContextImpl::GetPermissionControllerDelegate() {
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kWebLayerFakePermissions)) {
if (!permission_controller_delegate_) {
permission_controller_delegate_ =
std::make_unique<FakePermissionControllerDelegate>();
}
return permission_controller_delegate_.get();
}
return nullptr;
}
......
......@@ -76,6 +76,8 @@ class BrowserContextImpl : public content::BrowserContext {
DownloadManagerDelegateImpl download_delegate_;
SSLHostStateDelegateImpl ssl_host_state_delegate_;
std::unique_ptr<PrefService> user_pref_service_;
std::unique_ptr<content::PermissionControllerDelegate>
permission_controller_delegate_;
DISALLOW_COPY_AND_ASSIGN(BrowserContextImpl);
};
......
......@@ -47,6 +47,7 @@
#include "weblayer/browser/weblayer_browser_interface_binders.h"
#include "weblayer/browser/weblayer_content_browser_overlay_manifest.h"
#include "weblayer/common/features.h"
#include "weblayer/public/common/switches.h"
#include "weblayer/public/fullscreen_delegate.h"
#include "weblayer/public/main.h"
......@@ -126,6 +127,15 @@ ContentBrowserClientImpl::CreateBrowserMainParts(
return browser_main_parts;
}
void ContentBrowserClientImpl::AppendExtraCommandLineSwitches(
base::CommandLine* command_line,
int child_process_id) {
if (base::CommandLine::ForCurrentProcess()->HasSwitch(
switches::kWebLayerFakePermissions)) {
command_line->AppendSwitch(switches::kWebLayerFakePermissions);
}
}
std::string ContentBrowserClientImpl::GetApplicationLocale() {
return i18n::GetApplicationLocale();
}
......
......@@ -28,6 +28,8 @@ class ContentBrowserClientImpl : public content::ContentBrowserClient {
// ContentBrowserClient overrides.
std::unique_ptr<content::BrowserMainParts> CreateBrowserMainParts(
const content::MainFunctionParams& parameters) override;
void AppendExtraCommandLineSwitches(base::CommandLine* command_line,
int child_process_id) override;
std::string GetApplicationLocale() override;
std::string GetAcceptLangs(content::BrowserContext* context) override;
content::WebContentsViewDelegate* GetWebContentsViewDelegate(
......
// 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 "weblayer/browser/fake_permission_controller_delegate.h"
#include "base/callback.h"
#include "content/public/browser/permission_controller.h"
#include "content/public/browser/permission_type.h"
#include "content/public/browser/web_contents.h"
namespace weblayer {
FakePermissionControllerDelegate::FakePermissionControllerDelegate() = default;
FakePermissionControllerDelegate::~FakePermissionControllerDelegate() = default;
int FakePermissionControllerDelegate::RequestPermission(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
base::OnceCallback<void(blink::mojom::PermissionStatus)> callback) {
std::move(callback).Run(blink::mojom::PermissionStatus::GRANTED);
return content::PermissionController::kNoPendingOperation;
}
int FakePermissionControllerDelegate::RequestPermissions(
const std::vector<content::PermissionType>& permissions,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
base::OnceCallback<void(const std::vector<blink::mojom::PermissionStatus>&)>
callback) {
std::vector<blink::mojom::PermissionStatus> result(
permissions.size(), blink::mojom::PermissionStatus::GRANTED);
std::move(callback).Run(result);
return content::PermissionController::kNoPendingOperation;
}
void FakePermissionControllerDelegate::ResetPermission(
content::PermissionType permission,
const GURL& requesting_origin,
const GURL& embedding_origin) {}
blink::mojom::PermissionStatus
FakePermissionControllerDelegate::GetPermissionStatus(
content::PermissionType permission,
const GURL& requesting_origin,
const GURL& embedding_origin) {
return blink::mojom::PermissionStatus::GRANTED;
}
blink::mojom::PermissionStatus
FakePermissionControllerDelegate::GetPermissionStatusForFrame(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) {
return GetPermissionStatus(
permission, requesting_origin,
content::WebContents::FromRenderFrameHost(render_frame_host)
->GetLastCommittedURL()
.GetOrigin());
}
int FakePermissionControllerDelegate::SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback) {
return content::PermissionController::kNoPendingOperation;
}
void FakePermissionControllerDelegate::UnsubscribePermissionStatusChange(
int subscription_id) {}
} // namespace weblayer
// 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 WEBLAYER_BROWSER_FAKE_PERMISSION_CONTROLLER_DELEGATE_H_
#define WEBLAYER_BROWSER_FAKE_PERMISSION_CONTROLLER_DELEGATE_H_
#include "base/callback_forward.h"
#include "base/macros.h"
#include "content/public/browser/permission_controller_delegate.h"
namespace weblayer {
// Temporary permission controller delegate which grants all permissions. Once
// permissions have been implemented, this will be removed. This is only used if
// the --weblayer-fake-permissions switch is passed on the command line.
class FakePermissionControllerDelegate
: public content::PermissionControllerDelegate {
public:
FakePermissionControllerDelegate();
~FakePermissionControllerDelegate() override;
// PermissionControllerDelegate implementation.
int RequestPermission(content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
base::OnceCallback<void(blink::mojom::PermissionStatus)>
callback) override;
int RequestPermissions(
const std::vector<content::PermissionType>& permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
bool user_gesture,
base::OnceCallback<
void(const std::vector<blink::mojom::PermissionStatus>&)> callback)
override;
void ResetPermission(content::PermissionType permission,
const GURL& requesting_origin,
const GURL& embedding_origin) override;
blink::mojom::PermissionStatus GetPermissionStatus(
content::PermissionType permission,
const GURL& requesting_origin,
const GURL& embedding_origin) override;
blink::mojom::PermissionStatus GetPermissionStatusForFrame(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin) override;
int SubscribePermissionStatusChange(
content::PermissionType permission,
content::RenderFrameHost* render_frame_host,
const GURL& requesting_origin,
base::RepeatingCallback<void(blink::mojom::PermissionStatus)> callback)
override;
void UnsubscribePermissionStatusChange(int subscription_id) override;
private:
DISALLOW_COPY_AND_ASSIGN(FakePermissionControllerDelegate);
};
} // namespace weblayer
#endif // WEBLAYER_BROWSER_FAKE_PERMISSION_CONTROLLER_DELEGATE_H_
......@@ -9,4 +9,8 @@ namespace switches {
// Makes WebLayer Shell use the given path for its data directory.
const char kWebLayerUserDataDir[] = "weblayer-user-data-dir";
// Makes WebLayer use a fake permission controller delegate which grants all
// permissions.
const char kWebLayerFakePermissions[] = "weblayer-fake-permissions";
} // namespace switches
......@@ -8,6 +8,7 @@
namespace switches {
extern const char kWebLayerUserDataDir[];
extern const char kWebLayerFakePermissions[];
} // namespace switches
......
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