Commit 6b313bc2 authored by Ehimare Okoyomon's avatar Ehimare Okoyomon Committed by Commit Bot

[Android] Page info permissions subpage

Reuse SingleWebsiteSettings as a fragment for the permissions subpage of
page info. Will fix UI and reset functionality in a separate CL.

Screenshot: https://screenshot.googleplex.com/FyTQETNXefz.png
Bug: 1077766
Change-Id: I9f47ae80bcfdbd92c1399670948f5cdfea6f4e08
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2252183Reviewed-by: default avatarTheresa  <twellington@chromium.org>
Reviewed-by: default avatarMugdha Lakhani <nator@chromium.org>
Reviewed-by: default avatarFinnur Thorarinsson <finnur@chromium.org>
Reviewed-by: default avatarChristian Dullweber <dullweber@chromium.org>
Commit-Queue: Ehimare Okoyomon <eokoyomon@chromium.org>
Cr-Commit-Position: refs/heads/master@{#790793}
parent 181bc2fe
......@@ -6,12 +6,14 @@ package org.chromium.chrome.browser.page_info;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.text.SpannableString;
import android.text.TextUtils;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.VisibleForTesting;
import androidx.fragment.app.Fragment;
import org.chromium.base.Consumer;
import org.chromium.base.supplier.Supplier;
......@@ -28,7 +30,9 @@ import org.chromium.chrome.browser.performance_hints.PerformanceHintsObserver.Pe
import org.chromium.chrome.browser.previews.PreviewsAndroidBridge;
import org.chromium.chrome.browser.previews.PreviewsUma;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.browser.site_settings.ChromeSiteSettingsClient;
import org.chromium.chrome.browser.vr.VrModuleProvider;
import org.chromium.components.browser_ui.site_settings.SingleWebsiteSettings;
import org.chromium.components.content_settings.CookieControlsBridge;
import org.chromium.components.content_settings.CookieControlsObserver;
import org.chromium.components.embedder_support.browser_context.BrowserContextHandle;
......@@ -263,6 +267,19 @@ public class ChromePageInfoControllerDelegate extends PageInfoControllerDelegate
return mProfile;
}
/**
* {@inheritDoc}
*/
@Override
@NonNull
public Fragment getPermissionsSubpageFragmentForUrl(String url) {
Bundle fragmentArgs = SingleWebsiteSettings.createFragmentArgsForSite(url);
SingleWebsiteSettings fragment = (SingleWebsiteSettings) Fragment.instantiate(
mContext, SingleWebsiteSettings.class.getName(), fragmentArgs);
fragment.setSiteSettingsClient(new ChromeSiteSettingsClient(mContext, getBrowserContext()));
return fragment;
}
@VisibleForTesting
void setOfflinePageStateForTesting(@OfflinePageState int offlinePageState) {
mOfflinePageState = offlinePageState;
......
......@@ -272,7 +272,8 @@ public class SettingsActivity extends ChromeBaseAppCompatActivity
public void onAttachFragment(Fragment fragment) {
if (fragment instanceof SiteSettingsPreferenceFragment) {
((SiteSettingsPreferenceFragment) fragment)
.setSiteSettingsClient(new ChromeSiteSettingsClient(this));
.setSiteSettingsClient(new ChromeSiteSettingsClient(
this, Profile.getLastUsedRegularProfile()));
} else if (fragment instanceof FragmentSettingsLauncher) {
FragmentSettingsLauncher framentSettingsLauncher = (FragmentSettingsLauncher) fragment;
framentSettingsLauncher.setSettingsLauncher(mSettingsLauncher);
......
......@@ -46,17 +46,19 @@ public class ChromeSiteSettingsClient implements SiteSettingsClient {
private static final float FAVICON_TEXT_SIZE_FRACTION = 0.625f;
private final Context mContext;
private final BrowserContextHandle mBrowserContext;
private ChromeSiteSettingsHelpClient mChromeSiteSettingsHelpClient;
private ChromeWebappSettingsClient mChromeWebappSettingsClient;
private ManagedPreferenceDelegate mManagedPreferenceDelegate;
public ChromeSiteSettingsClient(Context context) {
public ChromeSiteSettingsClient(Context context, BrowserContextHandle browserContext) {
mContext = context;
mBrowserContext = browserContext;
}
@Override
public BrowserContextHandle getBrowserContextHandle() {
return Profile.getLastUsedRegularProfile();
return mBrowserContext;
}
@Override
......
......@@ -20,9 +20,11 @@ import org.chromium.base.test.util.CallbackHelper;
import org.chromium.base.test.util.CommandLineFlags;
import org.chromium.chrome.browser.ChromeActivity;
import org.chromium.chrome.browser.flags.ChromeSwitches;
import org.chromium.chrome.browser.profiles.Profile;
import org.chromium.chrome.test.ChromeActivityTestRule;
import org.chromium.chrome.test.ChromeJUnit4ClassRunner;
import org.chromium.content_public.browser.UiThreadTaskTraits;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import java.util.concurrent.TimeoutException;
......@@ -35,6 +37,7 @@ public class ChromeSiteSettingsClientTest {
@Rule
public ChromeActivityTestRule<ChromeActivity> mActivityTestRule =
new ChromeActivityTestRule<>(ChromeActivity.class);
ChromeSiteSettingsClient mSiteSettingsClient;
@Before
public void setUp() throws Exception {
......@@ -46,15 +49,17 @@ public class ChromeSiteSettingsClientTest {
@Test
@SmallTest
public void testFallbackFaviconLoads() throws TimeoutException {
ChromeSiteSettingsClient client =
new ChromeSiteSettingsClient(mActivityTestRule.getActivity());
TestThreadUtils.runOnUiThreadBlocking(() -> {
mSiteSettingsClient = new ChromeSiteSettingsClient(
mActivityTestRule.getActivity(), Profile.getLastUsedRegularProfile());
});
// Hold the Bitmap in an array because it gets assigned to in a closure, and all captured
// variables have to be effectively final.
Bitmap[] holder = new Bitmap[1];
CallbackHelper helper = new CallbackHelper();
PostTask.postTask(UiThreadTaskTraits.DEFAULT, () -> {
client.getFaviconImageForURL("url.with.no.favicon", favicon -> {
mSiteSettingsClient.getFaviconImageForURL("url.with.no.favicon", favicon -> {
holder[0] = favicon;
helper.notifyCalled();
});
......
......@@ -269,8 +269,8 @@ public class PageInfoController
PageInfoViewV2 view2 = (PageInfoViewV2) mView;
mConnectionController =
new PageInfoConnectionController(this, view2.getConnectionRowView());
mPermissionsController =
new PageInfoPermissionsController(this, view2.getPermissionsRowView());
mPermissionsController = new PageInfoPermissionsController(
this, view2.getPermissionsRowView(), mDelegate, mDisplayUrlBuilder.toString());
mCookiesController = new PageInfoCookiesController(
this, view2.getCookiesRowView(), viewParams.cookieControlsShown, mFullUrl);
} else {
......
......@@ -9,6 +9,7 @@ import android.content.Intent;
import androidx.annotation.IntDef;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
import org.chromium.base.Consumer;
import org.chromium.base.supplier.Supplier;
......@@ -212,4 +213,10 @@ public abstract class PageInfoControllerDelegate {
*/
@NonNull
public abstract BrowserContextHandle getBrowserContext();
/**
* @return Returns the fragment to be used for the permissions subpage of page info.
*/
@NonNull
public abstract Fragment getPermissionsSubpageFragmentForUrl(String url);
}
......@@ -7,18 +7,26 @@ package org.chromium.components.page_info;
import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.Fragment;
/**
* Class for controlling the page info permissions section.
*/
public class PageInfoPermissionsController implements PageInfoSubpageController {
private PageInfoMainPageController mMainController;
private PageInfoRowView mRowView;
private PageInfoControllerDelegate mDelegate;
private String mTitle;
private String mPageUrl;
private Fragment mSubpageFragment;
public PageInfoPermissionsController(
PageInfoMainPageController mainController, PageInfoRowView view) {
public PageInfoPermissionsController(PageInfoMainPageController mainController,
PageInfoRowView view, PageInfoControllerDelegate delegate, String pageUrl) {
mMainController = mainController;
mRowView = view;
mDelegate = delegate;
mPageUrl = pageUrl;
}
private void launchSubpage() {
......@@ -32,15 +40,22 @@ public class PageInfoPermissionsController implements PageInfoSubpageController
@Override
public View createViewForSubpage(ViewGroup parent) {
// TODO(crbug.com/1077766): Create and set the permissions specific view.
return null;
assert mSubpageFragment == null;
mSubpageFragment = mDelegate.getPermissionsSubpageFragmentForUrl(mPageUrl);
AppCompatActivity host = (AppCompatActivity) mRowView.getContext();
host.getSupportFragmentManager().beginTransaction().add(mSubpageFragment, null).commitNow();
return mSubpageFragment.getView();
}
@Override
public void onSubPageAttached() {}
@Override
public void onSubpageRemoved() {}
public void onSubpageRemoved() {
AppCompatActivity host = (AppCompatActivity) mRowView.getContext();
host.getSupportFragmentManager().beginTransaction().remove(mSubpageFragment).commitNow();
mSubpageFragment = null;
}
public void setPermissions(PageInfoView.PermissionParams params) {
mTitle = mRowView.getContext().getResources().getString(
......
......@@ -6,11 +6,14 @@ package org.chromium.weblayer_private;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.fragment.app.Fragment;
import org.chromium.base.StrictModeContext;
import org.chromium.base.supplier.Supplier;
import org.chromium.components.browser_ui.site_settings.SingleWebsiteSettings;
import org.chromium.components.content_settings.CookieControlsBridge;
import org.chromium.components.content_settings.CookieControlsObserver;
import org.chromium.components.embedder_support.browser_context.BrowserContextHandle;
......@@ -81,6 +84,19 @@ public class PageInfoControllerDelegateImpl extends PageInfoControllerDelegate {
return mProfile;
}
/**
* {@inheritDoc}
*/
@Override
@NonNull
public Fragment getPermissionsSubpageFragmentForUrl(String url) {
Bundle fragmentArgs = SingleWebsiteSettings.createFragmentArgsForSite(url);
SingleWebsiteSettings fragment = (SingleWebsiteSettings) Fragment.instantiate(
mContext, SingleWebsiteSettings.class.getName(), fragmentArgs);
fragment.setSiteSettingsClient(new WebLayerSiteSettingsClient(getBrowserContext()));
return fragment;
}
private static boolean isHttpOrHttps(GURL url) {
String scheme = url.getScheme();
return UrlConstants.HTTP_SCHEME.equals(scheme) || UrlConstants.HTTPS_SCHEME.equals(scheme);
......
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