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