Commit abea5dcc authored by Bo Liu's avatar Bo Liu Committed by Commit Bot

weblayer: preferred color scheme support

Read system setting and set preferred_color_scheme. Refactor code a bit
to mirror password_echo_enabled. Same as password_echo_enabled, check
system changes when fragment becomes foreground.

Bug: 1070701
Change-Id: Iafcbf6886f8d2f1be474d87759d546182be1562f
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2153829Reviewed-by: default avatarScott Violet <sky@chromium.org>
Commit-Queue: Bo <boliu@chromium.org>
Cr-Commit-Position: refs/heads/master@{#760520}
parent 0a09456a
......@@ -12,6 +12,7 @@
#include "base/path_service.h"
#include "components/base32/base32.h"
#include "content/public/browser/browser_context.h"
#include "content/public/common/web_preferences.h"
#include "weblayer/browser/feature_list_creator.h"
#include "weblayer/browser/persistence/browser_persister.h"
#include "weblayer/browser/persistence/minimal_browser_persister.h"
......@@ -209,12 +210,14 @@ std::vector<uint8_t> BrowserImpl::GetMinimalPersistenceState(
return PersistMinimalState(this, max_size_in_bytes);
}
bool BrowserImpl::GetPasswordEchoEnabled() {
void BrowserImpl::SetWebPreferences(content::WebPreferences* prefs) {
#if defined(OS_ANDROID)
return Java_BrowserImpl_getPasswordEchoEnabled(AttachCurrentThread(),
java_impl_);
#else
return false;
prefs->password_echo_enabled = Java_BrowserImpl_getPasswordEchoEnabled(
AttachCurrentThread(), java_impl_);
prefs->preferred_color_scheme =
Java_BrowserImpl_getDarkThemeEnabled(AttachCurrentThread(), java_impl_)
? blink::PreferredColorScheme::kDark
: blink::PreferredColorScheme::kLight;
#endif
}
......
......@@ -23,6 +23,7 @@ class FilePath;
namespace content {
class WebContents;
struct WebPreferences;
}
namespace weblayer {
......@@ -100,6 +101,7 @@ class BrowserImpl : public Browser {
}
bool GetPasswordEchoEnabled();
void SetWebPreferences(content::WebPreferences* prefs);
// Browser:
Tab* AddTab(std::unique_ptr<Tab> tab) override;
......
......@@ -282,12 +282,13 @@ blink::UserAgentMetadata ContentBrowserClientImpl::GetUserAgentMetadata() {
void ContentBrowserClientImpl::OverrideWebkitPrefs(
content::RenderViewHost* render_view_host,
content::WebPreferences* prefs) {
prefs->default_encoding = l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING);
content::WebContents* web_contents =
content::WebContents::FromRenderViewHost(render_view_host);
TabImpl* tab = TabImpl::FromWebContents(web_contents);
prefs->fullscreen_supported = tab && tab->fullscreen_delegate();
prefs->password_echo_enabled = tab && tab->GetPasswordEchoEnabled();
prefs->default_encoding = l10n_util::GetStringUTF8(IDS_DEFAULT_ENCODING);
if (tab)
tab->SetWebPreferences(prefs);
}
mojo::Remote<network::mojom::NetworkContext>
......
......@@ -6,6 +6,7 @@ package org.chromium.weblayer_private;
import android.content.Context;
import android.content.Intent;
import android.content.res.Configuration;
import android.os.Bundle;
import android.os.RemoteException;
import android.provider.Settings;
......@@ -62,6 +63,7 @@ public class BrowserImpl extends IBrowser.Stub {
private boolean mFragmentResumed;
// Cache the value instead of querying system every time.
private Boolean mPasswordEchoEnabled;
private Boolean mDarkThemeEnabled;
// Created in the constructor from saved state and used in setClient().
private PersistenceInfo mPersistenceInfo;
......@@ -237,12 +239,21 @@ public class BrowserImpl extends IBrowser.Stub {
new TabImpl(mProfile, mWindowAndroid, nativeTab);
}
private void checkPasswordEchoEnabled() {
if (mPasswordEchoEnabled == null) return;
boolean oldEnabled = mPasswordEchoEnabled;
mPasswordEchoEnabled = null;
boolean newEnabled = getPasswordEchoEnabled();
if (oldEnabled != newEnabled) {
private void checkPreferences() {
boolean changed = false;
if (mPasswordEchoEnabled != null) {
boolean oldEnabled = mPasswordEchoEnabled;
mPasswordEchoEnabled = null;
boolean newEnabled = getPasswordEchoEnabled();
changed = changed || oldEnabled != newEnabled;
}
if (mDarkThemeEnabled != null) {
boolean oldEnabled = mDarkThemeEnabled;
mDarkThemeEnabled = null;
boolean newEnabled = getDarkThemeEnabled();
changed = changed || oldEnabled != newEnabled;
}
if (changed) {
BrowserImplJni.get().webPreferencesChanged(mNativeBrowser);
}
}
......@@ -259,6 +270,18 @@ public class BrowserImpl extends IBrowser.Stub {
return mPasswordEchoEnabled;
}
@CalledByNative
private boolean getDarkThemeEnabled() {
Context context = getContext();
if (context == null) return false;
if (mDarkThemeEnabled == null) {
int uiMode = context.getResources().getConfiguration().uiMode;
mDarkThemeEnabled =
(uiMode & Configuration.UI_MODE_NIGHT_MASK) == Configuration.UI_MODE_NIGHT_YES;
}
return mDarkThemeEnabled;
}
@CalledByNative
private void onTabAdded(TabImpl tab) {
tab.attachToBrowser(this);
......@@ -398,7 +421,7 @@ public class BrowserImpl extends IBrowser.Stub {
mFragmentStarted = true;
BrowserImplJni.get().onFragmentStart(mNativeBrowser, this);
updateAllTabs();
checkPasswordEchoEnabled();
checkPreferences();
}
public void onFragmentStop() {
......
......@@ -29,6 +29,7 @@
#include "content/public/browser/render_view_host.h"
#include "content/public/browser/renderer_preferences_util.h"
#include "content/public/browser/web_contents.h"
#include "content/public/common/web_preferences.h"
#include "third_party/blink/public/mojom/renderer_preferences.mojom.h"
#include "ui/base/window_open_disposition.h"
#include "weblayer/browser/autofill_client_impl.h"
......@@ -342,8 +343,12 @@ void TabImpl::WebPreferencesChanged() {
web_contents_->GetRenderViewHost()->OnWebkitPreferencesChanged();
}
bool TabImpl::GetPasswordEchoEnabled() {
return browser_ ? browser_->GetPasswordEchoEnabled() : false;
void TabImpl::SetWebPreferences(content::WebPreferences* prefs) {
prefs->fullscreen_supported = !!fullscreen_delegate_;
if (!browser_)
return;
browser_->SetWebPreferences(prefs);
}
void TabImpl::OnLosingActive() {
......
......@@ -32,6 +32,7 @@ class AutofillProvider;
namespace content {
class WebContents;
struct ContextMenuParams;
struct WebPreferences;
}
namespace sessions {
......@@ -126,7 +127,6 @@ class TabImpl : public Tab,
#endif
ErrorPageDelegate* error_page_delegate() { return error_page_delegate_; }
FullscreenDelegate* fullscreen_delegate() { return fullscreen_delegate_; }
// Tab:
void SetErrorPageDelegate(ErrorPageDelegate* delegate) override;
......@@ -144,7 +144,7 @@ class TabImpl : public Tab,
#endif
void WebPreferencesChanged();
bool GetPasswordEchoEnabled();
void SetWebPreferences(content::WebPreferences* prefs);
// Executes |script| with a user gesture.
void ExecuteScriptWithUserGestureForTests(const base::string16& script);
......
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