Commit 8c0fbfa6 authored by Huanzhong Huang's avatar Huanzhong Huang Committed by Commit Bot

Cookie controls toggle in incognito ntp

Introduce a toggle in the incognito ntp that links to cookie controls setting.
Layout should be fixed in a subsequent cl.

Bug: 967668
Change-Id: Icedcae6575ae84b1ed6ef2feb353e0f0ae1b37c7
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/1826900
Commit-Queue: Huanzhong Huang <huanzhong@chromium.org>
Reviewed-by: default avatarDan Beam <dbeam@chromium.org>
Reviewed-by: default avatarChristian Dullweber <dullweber@chromium.org>
Cr-Commit-Position: refs/heads/master@{#703257}
parent f22d3463
......@@ -31,6 +31,9 @@ document.write('<link id="incognitothemecss" rel="stylesheet" ' +
<div class="bulletpoints">$i18nRaw{incognitoTabWarning}</div>
</div>
<div id="cookie-controls" $i18n{hiddenIfCookieControlsDisabled}>
<div>
<cr-toggle id="cookie-controls-toggle"></cr-toggle>
</div>
<div>
<em>$i18n{cookieControlsTitle}</em>
</div>
......@@ -43,5 +46,7 @@ document.write('<link id="incognitothemecss" rel="stylesheet" ' +
<script src="chrome://resources/js/cr.js"></script>
<script src="chrome://resources/js/util.js"></script>
<script src="incognito_tab.js"></script>
<!-- Lazy-load cr_toggle to avoid performance penalty introduced by loading Polymer -->
<script type="module" src="chrome://resources/cr_elements/cr_toggle/cr_toggle.m.js" async></script>
</body>
</html>
......@@ -10,6 +10,14 @@ window.addEventListener('load', function() {
'chrome://theme/css/incognito_new_tab_theme.css?' + Date.now();
});
chrome.send('observeThemeChanges');
cr.addWebUIListener('cookie-controls-changed', checked => {
$('cookie-controls-toggle').checked = checked;
});
$('cookie-controls-toggle').addEventListener('change', event => {
chrome.send('cookieControlsToggleChanged', [event.detail]);
});
chrome.send('observeCookieControlsModeChange');
});
// Handle the bookmark bar, theme, and font size change requests
......
......@@ -1248,6 +1248,8 @@ jumbo_split_static_library("ui") {
"webui/ntp/app_launcher_handler.h",
"webui/ntp/app_resource_cache_factory.cc",
"webui/ntp/app_resource_cache_factory.h",
"webui/ntp/cookie_controls_handler.cc",
"webui/ntp/cookie_controls_handler.h",
"webui/ntp/core_app_launcher_handler.cc",
"webui/ntp/core_app_launcher_handler.h",
"webui/ntp/new_tab_ui.cc",
......
// Copyright 2019 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 "chrome/browser/ui/webui/ntp/cookie_controls_handler.h"
#include "base/bind.h"
#include "base/values.h"
#include "chrome/browser/profiles/profile.h"
#include "components/content_settings/core/browser/cookie_settings.h"
#include "components/content_settings/core/common/pref_names.h"
#include "components/prefs/pref_service.h"
CookieControlsHandler::CookieControlsHandler() {}
CookieControlsHandler::~CookieControlsHandler() {}
void CookieControlsHandler::RegisterMessages() {
web_ui()->RegisterMessageCallback(
"cookieControlsToggleChanged",
base::BindRepeating(
&CookieControlsHandler::HandleCookieControlsToggleChanged,
base::Unretained(this)));
web_ui()->RegisterMessageCallback(
"observeCookieControlsModeChange",
base::BindRepeating(
&CookieControlsHandler::HandleObserveCookieControlsModeChange,
base::Unretained(this)));
}
void CookieControlsHandler::OnJavascriptAllowed() {
Profile* profile = Profile::FromWebUI(web_ui());
pref_change_registrar_.Init(profile->GetPrefs());
pref_change_registrar_.Add(
prefs::kCookieControlsMode,
base::Bind(&CookieControlsHandler::OnCookieControlsChanged,
base::Unretained(this)));
}
void CookieControlsHandler::OnJavascriptDisallowed() {
pref_change_registrar_.RemoveAll();
}
void CookieControlsHandler::HandleCookieControlsToggleChanged(
const base::ListValue* args) {
bool checked;
CHECK(args->GetBoolean(0, &checked));
Profile* profile = Profile::FromWebUI(web_ui());
profile->GetPrefs()->SetInteger(
prefs::kCookieControlsMode,
static_cast<int>(
checked ? content_settings::CookieControlsMode::kIncognitoOnly
: content_settings::CookieControlsMode::kOff));
}
void CookieControlsHandler::HandleObserveCookieControlsModeChange(
const base::ListValue* args) {
AllowJavascript();
OnCookieControlsChanged();
}
void CookieControlsHandler::OnCookieControlsChanged() {
Profile* profile = Profile::FromWebUI(web_ui());
int mode = profile->GetPrefs()->GetInteger(prefs::kCookieControlsMode);
base::Value checked(
mode == static_cast<int>(content_settings::CookieControlsMode::kOff)
? false
: true);
FireWebUIListener("cookie-controls-changed", checked);
}
// Copyright 2019 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 CHROME_BROWSER_UI_WEBUI_NTP_COOKIE_CONTROLS_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_NTP_COOKIE_CONTROLS_HANDLER_H_
#include "components/prefs/pref_change_registrar.h"
#include "content/public/browser/web_ui_message_handler.h"
class CookieControlsHandlerTest;
namespace base {
class ListValue;
}
// Handles requests for prefs::kCookieControlsMode retrival/update.
class CookieControlsHandler : public content::WebUIMessageHandler {
public:
CookieControlsHandler();
~CookieControlsHandler() override;
// WebUIMessageHandler
void RegisterMessages() override;
void OnJavascriptAllowed() override;
void OnJavascriptDisallowed() override;
void HandleCookieControlsToggleChanged(const base::ListValue* args);
void HandleObserveCookieControlsModeChange(const base::ListValue* args);
private:
friend class CookieControlsHandlerTest;
void OnCookieControlsChanged();
PrefChangeRegistrar pref_change_registrar_;
DISALLOW_COPY_AND_ASSIGN(CookieControlsHandler);
};
#endif // CHROME_BROWSER_UI_WEBUI_NTP_COOKIE_CONTROLS_HANDLER_H_
// Copyright 2019 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 "chrome/browser/ui/webui/ntp/cookie_controls_handler.h"
#include "base/values.h"
#include "chrome/test/base/chrome_render_view_host_test_harness.h"
#include "components/content_settings/core/browser/cookie_settings.h"
#include "components/content_settings/core/common/pref_names.h"
#include "components/prefs/pref_service.h"
#include "content/public/test/test_web_ui.h"
class CookieControlsHandlerTest : public ChromeRenderViewHostTestHarness {
public:
void SetUp() override {
ChromeRenderViewHostTestHarness::SetUp();
web_ui_.set_web_contents(web_contents());
handler_ = std::make_unique<CookieControlsHandler>();
handler_->set_web_ui(&web_ui_);
}
void TearDown() override {
handler_->set_web_ui(nullptr);
ChromeRenderViewHostTestHarness::TearDown();
}
protected:
content::TestWebUI web_ui_;
std::unique_ptr<CookieControlsHandler> handler_;
};
TEST_F(CookieControlsHandlerTest, HandleCookieControlsToggleChanged) {
EXPECT_EQ(
static_cast<int>(content_settings::CookieControlsMode::kIncognitoOnly),
Profile::FromWebUI(&web_ui_)->GetPrefs()->GetInteger(
prefs::kCookieControlsMode));
base::ListValue args_false;
args_false.AppendBoolean(false);
handler_->HandleCookieControlsToggleChanged(&args_false);
EXPECT_EQ(static_cast<int>(content_settings::CookieControlsMode::kOff),
Profile::FromWebUI(&web_ui_)->GetPrefs()->GetInteger(
prefs::kCookieControlsMode));
base::ListValue args_true;
args_true.AppendBoolean(true);
handler_->HandleCookieControlsToggleChanged(&args_true);
EXPECT_EQ(
static_cast<int>(content_settings::CookieControlsMode::kIncognitoOnly),
Profile::FromWebUI(&web_ui_)->GetPrefs()->GetInteger(
prefs::kCookieControlsMode));
}
......@@ -15,6 +15,7 @@
#include "base/values.h"
#include "chrome/browser/profiles/profile.h"
#include "chrome/browser/ui/webui/ntp/app_launcher_handler.h"
#include "chrome/browser/ui/webui/ntp/cookie_controls_handler.h"
#include "chrome/browser/ui/webui/ntp/core_app_launcher_handler.h"
#include "chrome/browser/ui/webui/ntp/ntp_resource_cache.h"
#include "chrome/browser/ui/webui/ntp/ntp_resource_cache_factory.h"
......@@ -56,8 +57,10 @@ NewTabUI::NewTabUI(content::WebUI* web_ui) : content::WebUIController(web_ui) {
Profile* profile = GetProfile();
if (!profile->IsGuestSession())
if (!profile->IsGuestSession()) {
web_ui->AddMessageHandler(std::make_unique<ThemeHandler>());
web_ui->AddMessageHandler(std::make_unique<CookieControlsHandler>());
}
// content::URLDataSource assumes the ownership of the html source.
content::URLDataSource::Add(profile, std::make_unique<NewTabHTMLSource>(
......
......@@ -3395,6 +3395,7 @@ test("unit_tests") {
"../browser/ui/webui/devtools_ui_data_source_unittest.cc",
"../browser/ui/webui/discards/graph_dump_impl_unittest.cc",
"../browser/ui/webui/favicon_source_unittest.cc",
"../browser/ui/webui/ntp/cookie_controls_handler_unittest.cc",
"../browser/webauthn/authenticator_request_scheduler_unittest.cc",
"../browser/webauthn/chrome_authenticator_request_delegate_unittest.cc",
"../test/pixel/browser_skia_gold_pixel_diff_unittest.cc",
......
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