Commit 4c143b4a authored by Caroline Rising's avatar Caroline Rising Committed by Commit Bot

Read later: Add menu close button.

Screenshot can be found in bug.

Bug: 1146024
Change-Id: If5d7977068051b8c96e4c36104655580d6bde29e
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2510410Reviewed-by: default avatarThomas Lukaszewicz <tluk@chromium.org>
Reviewed-by: default avatarConnie Wan <connily@chromium.org>
Reviewed-by: default avatarAlex Gough <ajgo@chromium.org>
Reviewed-by: default avatardpapad <dpapad@chromium.org>
Commit-Queue: Caroline Rising <corising@chromium.org>
Cr-Commit-Position: refs/heads/master@{#824641}
parent dc8d7f20
...@@ -97,6 +97,7 @@ js_library("app") { ...@@ -97,6 +97,7 @@ js_library("app") {
":read_later_api_proxy", ":read_later_api_proxy",
":read_later_item", ":read_later_item",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled", "//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
"//ui/webui/resources/cr_elements/cr_icon_button:cr_icon_button.m",
] ]
} }
......
<style include="mwb-shared-style"> <style include="mwb-shared-style">
#top-container {
display: flex;
}
#header { #header {
align-items: center; align-items: center;
display: flex; display: flex;
flex-grow: 1;
font-size: 15px; font-size: 15px;
height: var(--mwb-item-height); height: var(--mwb-item-height);
margin: 0; margin: 0;
padding-inline-start: var(--mwb-list-item-horizontal-margin); padding-inline-start: var(--mwb-list-item-horizontal-margin);
} }
cr-icon-button {
border-radius: 50%;
margin-inline-end: 4px;
margin-top: 4px;
--cr-icon-button-fill-color: var(--google-grey-refresh-700);
--cr-icon-button-icon-size: var(--mwb-icon-size);
--cr-icon-button-size: 24px;
}
cr-icon-button:hover {
background-color: rgba(var(--google-grey-900-rgb), .1);
}
#read-later-list { #read-later-list {
max-height: 444px; max-height: 444px;
overflow-x: hidden; overflow-x: hidden;
...@@ -26,7 +44,13 @@ ...@@ -26,7 +44,13 @@
} }
</style> </style>
<div id="header">$i18n{title}</div> <div id="top-container">
<div id="header">$i18n{title}</div>
<cr-icon-button id="closeButton" aria-label="$i18n{tooltipClose}"
disable-ripple iron-icon="cr:close" on-click="onCloseClick_"
title="$i18n{tooltipClose}">
</cr-icon-button>
</div>
<div id="read-later-list"> <div id="read-later-list">
<div class="sub-heading">$i18n{unreadHeader}</div> <div class="sub-heading">$i18n{unreadHeader}</div>
<template id="ureadItemsList" is="dom-repeat" items="[[unreadItems_]]"> <template id="ureadItemsList" is="dom-repeat" items="[[unreadItems_]]">
......
...@@ -2,6 +2,7 @@ ...@@ -2,6 +2,7 @@
// Use of this source code is governed by a BSD-style license that can be // Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file. // found in the LICENSE file.
import 'chrome://resources/cr_elements/cr_icon_button/cr_icon_button.m.js';
import 'chrome://resources/cr_elements/shared_vars_css.m.js'; import 'chrome://resources/cr_elements/shared_vars_css.m.js';
import 'chrome://resources/cr_elements/mwb_shared_style.js'; import 'chrome://resources/cr_elements/mwb_shared_style.js';
import 'chrome://resources/cr_elements/mwb_shared_vars.js'; import 'chrome://resources/cr_elements/mwb_shared_vars.js';
...@@ -74,6 +75,15 @@ export class ReadLaterAppElement extends PolymerElement { ...@@ -74,6 +75,15 @@ export class ReadLaterAppElement extends PolymerElement {
this.readItems_ = entries.readEntries; this.readItems_ = entries.readEntries;
}); });
} }
/**
* @param {!Event} e
* @private
*/
onCloseClick_(e) {
e.stopPropagation();
this.apiProxy_.closeUI();
}
} }
customElements.define(ReadLaterAppElement.is, ReadLaterAppElement); customElements.define(ReadLaterAppElement.is, ReadLaterAppElement);
...@@ -30,6 +30,8 @@ export class ReadLaterApiProxy { ...@@ -30,6 +30,8 @@ export class ReadLaterApiProxy {
showUI() {} showUI() {}
closeUI() {}
/** @return {!readLater.mojom.PageCallbackRouter} */ /** @return {!readLater.mojom.PageCallbackRouter} */
getCallbackRouter() {} getCallbackRouter() {}
} }
...@@ -74,6 +76,11 @@ export class ReadLaterApiProxyImpl { ...@@ -74,6 +76,11 @@ export class ReadLaterApiProxyImpl {
this.handler.showUI(); this.handler.showUI();
} }
/** @override */
closeUI() {
this.handler.closeUI();
}
/** @override */ /** @override */
getCallbackRouter() { getCallbackRouter() {
return this.callbackRouter; return this.callbackRouter;
......
...@@ -70,6 +70,12 @@ void WebUIBubbleDialogView::ShowUI() { ...@@ -70,6 +70,12 @@ void WebUIBubbleDialogView::ShowUI() {
web_view_->GetWebContents()->Focus(); web_view_->GetWebContents()->Focus();
} }
void WebUIBubbleDialogView::CloseUI() {
DCHECK(GetWidget());
GetWidget()->CloseWithReason(
views::Widget::ClosedReason::kCloseButtonClicked);
}
void WebUIBubbleDialogView::OnWebViewSizeChanged() { void WebUIBubbleDialogView::OnWebViewSizeChanged() {
SizeToContents(); SizeToContents();
} }
...@@ -31,6 +31,7 @@ class WebUIBubbleDialogView : public views::BubbleDialogDelegateView, ...@@ -31,6 +31,7 @@ class WebUIBubbleDialogView : public views::BubbleDialogDelegateView,
// WebUIBubbleView::Host: // WebUIBubbleView::Host:
void ShowUI() override; void ShowUI() override;
void CloseUI() override;
void OnWebViewSizeChanged() override; void OnWebViewSizeChanged() override;
private: private:
......
...@@ -73,3 +73,8 @@ void WebUIBubbleView::ShowUI() { ...@@ -73,3 +73,8 @@ void WebUIBubbleView::ShowUI() {
if (host_) if (host_)
host_->ShowUI(); host_->ShowUI();
} }
void WebUIBubbleView::CloseUI() {
if (host_)
host_->CloseUI();
}
...@@ -26,6 +26,7 @@ class WebUIBubbleView : public views::WebView, ...@@ -26,6 +26,7 @@ class WebUIBubbleView : public views::WebView,
class Host { class Host {
public: public:
virtual void ShowUI() = 0; virtual void ShowUI() = 0;
virtual void CloseUI() = 0;
virtual void OnWebViewSizeChanged() = 0; virtual void OnWebViewSizeChanged() = 0;
}; };
...@@ -63,6 +64,7 @@ class WebUIBubbleView : public views::WebView, ...@@ -63,6 +64,7 @@ class WebUIBubbleView : public views::WebView,
// MojoBubbleWebUIController::Embedder: // MojoBubbleWebUIController::Embedder:
void ShowUI() override; void ShowUI() override;
void CloseUI() override;
private: private:
// |host_| does not always have to be set. The WebUIBubbleView can be cached // |host_| does not always have to be set. The WebUIBubbleView can be cached
......
...@@ -27,13 +27,16 @@ namespace { ...@@ -27,13 +27,16 @@ namespace {
class MockHost : public WebUIBubbleView::Host { class MockHost : public WebUIBubbleView::Host {
public: public:
void ShowUI() override { ++show_ui_called_; } void ShowUI() override { ++show_ui_called_; }
void CloseUI() override { ++close_ui_called_; }
void OnWebViewSizeChanged() override { ++size_changed_called_; } void OnWebViewSizeChanged() override { ++size_changed_called_; }
int show_ui_called() const { return show_ui_called_; } int show_ui_called() const { return show_ui_called_; }
int close_ui_called() const { return close_ui_called_; }
int size_changed_called() const { return size_changed_called_; } int size_changed_called() const { return size_changed_called_; }
private: private:
int show_ui_called_ = 0; int show_ui_called_ = 0;
int close_ui_called_ = 0;
int size_changed_called_ = 0; int size_changed_called_ = 0;
}; };
...@@ -118,5 +121,11 @@ TEST_F(WebUIBubbleViewTest, ShowUINotifiesHost) { ...@@ -118,5 +121,11 @@ TEST_F(WebUIBubbleViewTest, ShowUINotifiesHost) {
EXPECT_EQ(1, host().show_ui_called()); EXPECT_EQ(1, host().show_ui_called());
} }
TEST_F(WebUIBubbleViewTest, CloseUINotifiesHost) {
EXPECT_EQ(0, host().close_ui_called());
web_view()->CloseUI();
EXPECT_EQ(1, host().close_ui_called());
}
} // namespace test } // namespace test
} // namespace views } // namespace views
...@@ -46,6 +46,9 @@ interface PageHandler { ...@@ -46,6 +46,9 @@ interface PageHandler {
// Notify the backend that the UI is ready to be shown. // Notify the backend that the UI is ready to be shown.
ShowUI(); ShowUI();
// Notify the backend that the dialog should be closed.
CloseUI();
}; };
// WebUI-side handler for requests from the browser. // WebUI-side handler for requests from the browser.
......
...@@ -102,6 +102,12 @@ void ReadLaterPageHandler::ShowUI() { ...@@ -102,6 +102,12 @@ void ReadLaterPageHandler::ShowUI() {
embedder->ShowUI(); embedder->ShowUI();
} }
void ReadLaterPageHandler::CloseUI() {
auto embedder = read_later_ui_->embedder();
if (embedder)
embedder->CloseUI();
}
read_later::mojom::ReadLaterEntryPtr ReadLaterPageHandler::GetEntryData( read_later::mojom::ReadLaterEntryPtr ReadLaterPageHandler::GetEntryData(
const ReadingListEntry* entry) { const ReadingListEntry* entry) {
auto entry_data = read_later::mojom::ReadLaterEntry::New(); auto entry_data = read_later::mojom::ReadLaterEntry::New();
......
...@@ -39,6 +39,7 @@ class ReadLaterPageHandler : public read_later::mojom::PageHandler { ...@@ -39,6 +39,7 @@ class ReadLaterPageHandler : public read_later::mojom::PageHandler {
void UpdateReadStatus(const GURL& url, bool read) override; void UpdateReadStatus(const GURL& url, bool read) override;
void RemoveEntry(const GURL& url) override; void RemoveEntry(const GURL& url) override;
void ShowUI() override; void ShowUI() override;
void CloseUI() override;
private: private:
// Gets the reading list entry data used for displaying to the user and // Gets the reading list entry data used for displaying to the user and
......
...@@ -37,6 +37,7 @@ ReadLaterUI::ReadLaterUI(content::WebUI* web_ui) ...@@ -37,6 +37,7 @@ ReadLaterUI::ReadLaterUI(content::WebUI* web_ui)
static constexpr webui::LocalizedString kLocalizedStrings[] = { static constexpr webui::LocalizedString kLocalizedStrings[] = {
{"readHeader", IDS_READ_LATER_MENU_READ_HEADER}, {"readHeader", IDS_READ_LATER_MENU_READ_HEADER},
{"title", IDS_READ_LATER_TITLE}, {"title", IDS_READ_LATER_TITLE},
{"tooltipClose", IDS_CLOSE},
{"tooltipDelete", IDS_DELETE}, {"tooltipDelete", IDS_DELETE},
{"tooltipMarkAsRead", IDS_READ_LATER_MENU_TOOLTIP_MARK_AS_READ}, {"tooltipMarkAsRead", IDS_READ_LATER_MENU_TOOLTIP_MARK_AS_READ},
{"tooltipMarkAsUnread", IDS_READ_LATER_MENU_TOOLTIP_MARK_AS_UNREAD}, {"tooltipMarkAsUnread", IDS_READ_LATER_MENU_TOOLTIP_MARK_AS_UNREAD},
......
...@@ -145,4 +145,11 @@ suite('ReadLaterAppTest', () => { ...@@ -145,4 +145,11 @@ suite('ReadLaterAppTest', () => {
const url = await testProxy.whenCalled('removeEntry'); const url = await testProxy.whenCalled('removeEntry');
assertEquals(expectedUrl, url); assertEquals(expectedUrl, url);
}); });
test('Click on menu button triggers actions', async () => {
const readLaterCloseButton =
readLaterApp.shadowRoot.querySelector('#closeButton');
readLaterCloseButton.click();
await testProxy.whenCalled('closeUI');
});
}); });
...@@ -16,6 +16,7 @@ export class TestReadLaterApiProxy extends TestBrowserProxy { ...@@ -16,6 +16,7 @@ export class TestReadLaterApiProxy extends TestBrowserProxy {
'updateReadStatus', 'updateReadStatus',
'removeEntry', 'removeEntry',
'showUI', 'showUI',
'closeUI',
]); ]);
/** @type {!readLater.mojom.PageCallbackRouter} */ /** @type {!readLater.mojom.PageCallbackRouter} */
...@@ -51,6 +52,11 @@ export class TestReadLaterApiProxy extends TestBrowserProxy { ...@@ -51,6 +52,11 @@ export class TestReadLaterApiProxy extends TestBrowserProxy {
this.methodCalled('showUI'); this.methodCalled('showUI');
} }
/** @override */
closeUI() {
this.methodCalled('closeUI');
}
/** @override */ /** @override */
getCallbackRouter() { getCallbackRouter() {
return this.callbackRouter; return this.callbackRouter;
......
...@@ -20,6 +20,7 @@ class MojoBubbleWebUIController : public MojoWebUIController { ...@@ -20,6 +20,7 @@ class MojoBubbleWebUIController : public MojoWebUIController {
class Embedder { class Embedder {
public: public:
virtual void ShowUI() = 0; virtual void ShowUI() = 0;
virtual void CloseUI() = 0;
}; };
// By default MojoBubbleWebUIController do not have normal WebUI bindings. // By default MojoBubbleWebUIController do not have normal WebUI bindings.
......
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