Commit 4111017b authored by Clark DuVall's avatar Clark DuVall Committed by Commit Bot

Drop permissions requests in preview tab

This change allows the preview tab to tell PermissionRequestManager to
drop any permission requests it receives for the associated WebContents.

TBR=andypaicu@chromium.org

Bug: 1057951
Change-Id: I65ee35fbaf2081cc99d8384a5b0818fc9f026ef3
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2112812
Commit-Queue: Clark DuVall <cduvall@chromium.org>
Reviewed-by: default avatarShakti Sahu <shaktisahu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#752573}
parent 4fbd91fe
...@@ -25,7 +25,6 @@ import org.chromium.chrome.browser.thinwebview.ThinWebViewConstraints; ...@@ -25,7 +25,6 @@ import org.chromium.chrome.browser.thinwebview.ThinWebViewConstraints;
import org.chromium.chrome.browser.thinwebview.ThinWebViewFactory; import org.chromium.chrome.browser.thinwebview.ThinWebViewFactory;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContent; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetContent;
import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController; import org.chromium.chrome.browser.widget.bottomsheet.BottomSheetController;
import org.chromium.components.browser_ui.modaldialog.AppModalPresenter;
import org.chromium.components.browser_ui.widget.FadingShadow; import org.chromium.components.browser_ui.widget.FadingShadow;
import org.chromium.components.browser_ui.widget.FadingShadowView; import org.chromium.components.browser_ui.widget.FadingShadowView;
import org.chromium.components.embedder_support.delegate.WebContentsDelegateAndroid; import org.chromium.components.embedder_support.delegate.WebContentsDelegateAndroid;
...@@ -35,7 +34,6 @@ import org.chromium.components.url_formatter.UrlFormatter; ...@@ -35,7 +34,6 @@ import org.chromium.components.url_formatter.UrlFormatter;
import org.chromium.content_public.browser.RenderCoordinates; import org.chromium.content_public.browser.RenderCoordinates;
import org.chromium.content_public.browser.WebContents; import org.chromium.content_public.browser.WebContents;
import org.chromium.ui.base.ActivityWindowAndroid; import org.chromium.ui.base.ActivityWindowAndroid;
import org.chromium.ui.modaldialog.ModalDialogManager;
import org.chromium.url.GURL; import org.chromium.url.GURL;
/** /**
...@@ -59,7 +57,6 @@ public class EphemeralTabSheetContent implements BottomSheetContent { ...@@ -59,7 +57,6 @@ public class EphemeralTabSheetContent implements BottomSheetContent {
private FadingShadowView mShadow; private FadingShadowView mShadow;
private Drawable mCurrentFavicon; private Drawable mCurrentFavicon;
private ImageView mFaviconView; private ImageView mFaviconView;
private ModalDialogManager mModalDialogManager;
/** /**
* Constructor. * Constructor.
...@@ -103,12 +100,8 @@ public class EphemeralTabSheetContent implements BottomSheetContent { ...@@ -103,12 +100,8 @@ public class EphemeralTabSheetContent implements BottomSheetContent {
* bottom sheet. * bottom sheet.
*/ */
private void createThinWebView(int maxSheetHeight) { private void createThinWebView(int maxSheetHeight) {
mThinWebView = ThinWebViewFactory.create(mContext, new ActivityWindowAndroid(mContext) { mThinWebView = ThinWebViewFactory.create(
@Override mContext, new ActivityWindowAndroid(mContext), new ThinWebViewConstraints());
public @Nullable ModalDialogManager getModalDialogManager() {
return EphemeralTabSheetContent.this.getModalDialogManager();
}
}, new ThinWebViewConstraints());
mSheetContentView = new FrameLayout(mContext); mSheetContentView = new FrameLayout(mContext);
mThinWebView.getView().setLayoutParams(new FrameLayout.LayoutParams( mThinWebView.getView().setLayoutParams(new FrameLayout.LayoutParams(
...@@ -118,14 +111,6 @@ public class EphemeralTabSheetContent implements BottomSheetContent { ...@@ -118,14 +111,6 @@ public class EphemeralTabSheetContent implements BottomSheetContent {
mSheetContentView.setPadding(0, mToolbarHeightPx, 0, 0); mSheetContentView.setPadding(0, mToolbarHeightPx, 0, 0);
} }
private ModalDialogManager getModalDialogManager() {
if (mModalDialogManager == null) {
mModalDialogManager = new ModalDialogManager(
new AppModalPresenter(mContext), ModalDialogManager.ModalDialogType.APP);
}
return mModalDialogManager;
}
private void createToolbarView() { private void createToolbarView() {
mToolbarView = mToolbarView =
(ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.sheet_tab_toolbar, null); (ViewGroup) LayoutInflater.from(mContext).inflate(R.layout.sheet_tab_toolbar, null);
...@@ -247,10 +232,6 @@ public class EphemeralTabSheetContent implements BottomSheetContent { ...@@ -247,10 +232,6 @@ public class EphemeralTabSheetContent implements BottomSheetContent {
@Override @Override
public void destroy() { public void destroy() {
mThinWebView.destroy(); mThinWebView.destroy();
if (mModalDialogManager != null) {
mModalDialogManager.destroy();
mModalDialogManager = null;
}
} }
@Override @Override
......
...@@ -17,6 +17,7 @@ static_library("internal") { ...@@ -17,6 +17,7 @@ static_library("internal") {
":jni_headers", ":jni_headers",
"//cc", "//cc",
"//chrome/browser/ui", "//chrome/browser/ui",
"//components/permissions",
"//skia", "//skia",
] ]
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "chrome/browser/ui/android/view_android_helper.h" #include "chrome/browser/ui/android/view_android_helper.h"
#include "chrome/browser/ui/tab_helpers.h" #include "chrome/browser/ui/tab_helpers.h"
#include "components/embedder_support/android/delegate/web_contents_delegate_android.h" #include "components/embedder_support/android/delegate/web_contents_delegate_android.h"
#include "components/permissions/permission_request_manager.h"
#include "content/public/browser/web_contents.h" #include "content/public/browser/web_contents.h"
using base::android::JavaParamRef; using base::android::JavaParamRef;
...@@ -76,6 +77,8 @@ void ThinWebView::SetWebContents(content::WebContents* web_contents, ...@@ -76,6 +77,8 @@ void ThinWebView::SetWebContents(content::WebContents* web_contents,
web_contents->SetDelegate(delegate); web_contents->SetDelegate(delegate);
TabHelpers::AttachTabHelpers(web_contents); TabHelpers::AttachTabHelpers(web_contents);
permissions::PermissionRequestManager::FromWebContents(web_contents)
->set_web_contents_supports_permission_requests(false);
ViewAndroidHelper::FromWebContents(web_contents) ViewAndroidHelper::FromWebContents(web_contents)
->SetViewAndroid(web_contents->GetNativeView()); ->SetViewAndroid(web_contents->GetNativeView());
} }
......
...@@ -93,6 +93,12 @@ void PermissionRequestManager::AddRequest(PermissionRequest* request) { ...@@ -93,6 +93,12 @@ void PermissionRequestManager::AddRequest(PermissionRequest* request) {
return; return;
} }
if (!web_contents_supports_permission_requests_) {
request->Cancelled();
request->RequestFinished();
return;
}
// TODO(tsergeant): change the UMA to no longer mention bubbles. // TODO(tsergeant): change the UMA to no longer mention bubbles.
base::RecordAction(base::UserMetricsAction("PermissionBubbleRequest")); base::RecordAction(base::UserMetricsAction("PermissionBubbleRequest"));
......
...@@ -109,6 +109,12 @@ class PermissionRequestManager ...@@ -109,6 +109,12 @@ class PermissionRequestManager
void Deny() override; void Deny() override;
void Closing() override; void Closing() override;
void set_web_contents_supports_permission_requests(
bool web_contents_supports_permission_requests) {
web_contents_supports_permission_requests_ =
web_contents_supports_permission_requests;
}
// For testing only, used to override the default UI selector. // For testing only, used to override the default UI selector.
void set_notification_permission_ui_selector_for_testing( void set_notification_permission_ui_selector_for_testing(
std::unique_ptr<NotificationPermissionUiSelector> selector) { std::unique_ptr<NotificationPermissionUiSelector> selector) {
...@@ -233,6 +239,10 @@ class PermissionRequestManager ...@@ -233,6 +239,10 @@ class PermissionRequestManager
// should be ignored. // should be ignored.
bool deleting_bubble_ = false; bool deleting_bubble_ = false;
// Whether the web contents associated with this request manager supports
// permission prompts.
bool web_contents_supports_permission_requests_ = true;
base::WeakPtrFactory<PermissionRequestManager> weak_factory_{this}; base::WeakPtrFactory<PermissionRequestManager> weak_factory_{this};
WEB_CONTENTS_USER_DATA_KEY_DECL(); WEB_CONTENTS_USER_DATA_KEY_DECL();
}; };
......
...@@ -566,4 +566,16 @@ TEST_F(PermissionRequestManagerTest, ...@@ -566,4 +566,16 @@ TEST_F(PermissionRequestManagerTest,
EXPECT_FALSE(manager_->ShouldCurrentRequestUseQuietUI()); EXPECT_FALSE(manager_->ShouldCurrentRequestUseQuietUI());
Accept(); Accept();
} }
TEST_F(PermissionRequestManagerTest, RequestsNotSupported) {
manager_->AddRequest(&request1_);
WaitForBubbleToBeShown();
Accept();
EXPECT_TRUE(request1_.granted());
manager_->set_web_contents_supports_permission_requests(false);
manager_->AddRequest(&request2_);
EXPECT_TRUE(request2_.cancelled());
}
} // namespace permissions } // namespace permissions
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