Commit 4d425660 authored by spqchan's avatar spqchan Committed by Commit Bot

[Mac] Test for BrowserTouchBar's BookmarkTabHelperObserver

Add a test that checks if the BrowserTouchBar's
BookmarkTapHelperObserver gets removed when it's destroyed.

Follow up to:
https://chromium-review.googlesource.com/c/chromium/src/+/1099483

Bug: 852222
Change-Id: I60c08a195a8b8adb1848d120c3492783fa615ba9
Reviewed-on: https://chromium-review.googlesource.com/1101484
Commit-Queue: Sarah Chan <spqchan@chromium.org>
Reviewed-by: default avatarScott Violet <sky@chromium.org>
Reviewed-by: default avatarRobert Sesek <rsesek@chromium.org>
Cr-Commit-Position: refs/heads/master@{#568206}
parent 43da8c87
...@@ -80,6 +80,10 @@ void BookmarkTabHelper::RemoveObserver(BookmarkTabHelperObserver* observer) { ...@@ -80,6 +80,10 @@ void BookmarkTabHelper::RemoveObserver(BookmarkTabHelperObserver* observer) {
observers_.RemoveObserver(observer); observers_.RemoveObserver(observer);
} }
bool BookmarkTabHelper::HasObserver(BookmarkTabHelperObserver* observer) const {
return observers_.HasObserver(observer);
}
BookmarkTabHelper::BookmarkTabHelper(content::WebContents* web_contents) BookmarkTabHelper::BookmarkTabHelper(content::WebContents* web_contents)
: content::WebContentsObserver(web_contents), : content::WebContentsObserver(web_contents),
is_starred_(false), is_starred_(false),
......
...@@ -56,6 +56,7 @@ class BookmarkTabHelper ...@@ -56,6 +56,7 @@ class BookmarkTabHelper
void AddObserver(BookmarkTabHelperObserver* observer); void AddObserver(BookmarkTabHelperObserver* observer);
void RemoveObserver(BookmarkTabHelperObserver* observer); void RemoveObserver(BookmarkTabHelperObserver* observer);
bool HasObserver(BookmarkTabHelperObserver* observer) const;
private: private:
friend class content::WebContentsUserData<BookmarkTabHelper>; friend class content::WebContentsUserData<BookmarkTabHelper>;
......
...@@ -1874,7 +1874,7 @@ willAnimateFromState:(BookmarkBar::State)oldState ...@@ -1874,7 +1874,7 @@ willAnimateFromState:(BookmarkBar::State)oldState
} }
- (void)setBrowserWindowTouchBar:(BrowserWindowTouchBar*)touchBar { - (void)setBrowserWindowTouchBar:(BrowserWindowTouchBar*)touchBar {
touchBar_.reset(touchBar); touchBar_.reset([touchBar retain]);
} }
- (void)executeExtensionCommand:(const std::string&)extension_id - (void)executeExtensionCommand:(const std::string&)extension_id
......
...@@ -10,6 +10,7 @@ ...@@ -10,6 +10,7 @@
#include "base/mac/availability.h" #include "base/mac/availability.h"
#import "ui/base/cocoa/touch_bar_forward_declarations.h" #import "ui/base/cocoa/touch_bar_forward_declarations.h"
class BookmarkTabHelperObserver;
class Browser; class Browser;
@class BrowserWindowController; @class BrowserWindowController;
...@@ -53,6 +54,10 @@ class Browser; ...@@ -53,6 +54,10 @@ class Browser;
// it's null. // it's null.
- (NSSegmentedControl*)backForwardControl; - (NSSegmentedControl*)backForwardControl;
// Returns the bridge object that BrowserWindowTouchBar uses to receive
// notifications.
- (BookmarkTabHelperObserver*)bookmarkTabObserver;
@end @end
#endif // CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_TOUCH_BAR_H_ #endif // CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_TOUCH_BAR_H_
...@@ -616,4 +616,8 @@ class BrowserTouchBarNotificationBridge : public CommandObserver, ...@@ -616,4 +616,8 @@ class BrowserTouchBarNotificationBridge : public CommandObserver,
return backForwardControl_.get(); return backForwardControl_.get();
} }
- (BookmarkTabHelperObserver*)bookmarkTabObserver {
return notificationBridge_.get();
}
@end @end
...@@ -3,6 +3,8 @@ ...@@ -3,6 +3,8 @@
// found in the LICENSE file. // found in the LICENSE file.
#include "chrome/app/chrome_command_ids.h" #include "chrome/app/chrome_command_ids.h"
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper.h"
#include "chrome/browser/ui/bookmarks/bookmark_tab_helper_observer.h"
#include "chrome/browser/ui/browser.h" #include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/browser_window.h" #include "chrome/browser/ui/browser_window.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h" #import "chrome/browser/ui/cocoa/browser_window_controller.h"
...@@ -27,19 +29,23 @@ class BrowserWindowTouchBarTest : public InProcessBrowserTest { ...@@ -27,19 +29,23 @@ class BrowserWindowTouchBarTest : public InProcessBrowserTest {
BrowserWindowTouchBarTest() : InProcessBrowserTest() {} BrowserWindowTouchBarTest() : InProcessBrowserTest() {}
void SetUpOnMainThread() override { void SetUpOnMainThread() override {
// Ownership is passed to BrowserWindowController in browser_touch_bar_.reset([[BrowserWindowTouchBar alloc]
// -setBrowserWindowTouchBar:
browser_touch_bar_ = [[BrowserWindowTouchBar alloc]
initWithBrowser:browser() initWithBrowser:browser()
window:[browser_window_controller() window]]; window:[browser_window_controller() window]]);
[browser_window_controller() setBrowserWindowTouchBar:browser_touch_bar_]; [browser_window_controller()
setBrowserWindowTouchBar:browser_touch_bar_.get()];
} }
void TearDownOnMainThread() override { void TearDownOnMainThread() override {
[browser_window_controller() setBrowserWindowTouchBar:nil]; DestroyBrowserWindowTouchBar();
InProcessBrowserTest::TearDownOnMainThread(); InProcessBrowserTest::TearDownOnMainThread();
} }
void DestroyBrowserWindowTouchBar() {
[browser_window_controller() setBrowserWindowTouchBar:nil];
browser_touch_bar_.reset();
}
BrowserWindowController* browser_window_controller() { BrowserWindowController* browser_window_controller() {
return [BrowserWindowController return [BrowserWindowController
browserWindowControllerForWindow:browser() browserWindowControllerForWindow:browser()
...@@ -52,7 +58,7 @@ class BrowserWindowTouchBarTest : public InProcessBrowserTest { ...@@ -52,7 +58,7 @@ class BrowserWindowTouchBarTest : public InProcessBrowserTest {
} }
private: private:
BrowserWindowTouchBar* browser_touch_bar_; base::scoped_nsobject<BrowserWindowTouchBar> browser_touch_bar_;
test::ScopedMacViewsBrowserMode cocoa_browser_mode_{false}; test::ScopedMacViewsBrowserMode cocoa_browser_mode_{false};
...@@ -99,3 +105,24 @@ IN_PROC_BROWSER_TEST_F(BrowserWindowTouchBarTest, SearchEngineChanges) { ...@@ -99,3 +105,24 @@ IN_PROC_BROWSER_TEST_F(BrowserWindowTouchBarTest, SearchEngineChanges) {
EXPECT_NE(touch_bar, [window touchBar]); EXPECT_NE(touch_bar, [window touchBar]);
} }
} }
// Tests to see if the touch bar's bookmark tab helper observer gets removed
// when the touch bar is destroyed.
IN_PROC_BROWSER_TEST_F(BrowserWindowTouchBarTest, DestroyNotificationBridge) {
if (@available(macOS 10.12.2, *)) {
BookmarkTabHelperObserver* observer =
[browser_touch_bar() bookmarkTabObserver];
std::unique_ptr<content::WebContents> contents =
content::WebContents::Create(
content::WebContents::CreateParams(browser()->profile()));
browser()->tab_strip_model()->AppendWebContents(std::move(contents), true);
BookmarkTabHelper* tab_helper = BookmarkTabHelper::FromWebContents(
browser()->tab_strip_model()->GetActiveWebContents());
DCHECK(tab_helper);
EXPECT_TRUE(tab_helper->HasObserver(observer));
DestroyBrowserWindowTouchBar();
EXPECT_FALSE(tab_helper->HasObserver(observer));
}
}
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