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) {
observers_.RemoveObserver(observer);
}
bool BookmarkTabHelper::HasObserver(BookmarkTabHelperObserver* observer) const {
return observers_.HasObserver(observer);
}
BookmarkTabHelper::BookmarkTabHelper(content::WebContents* web_contents)
: content::WebContentsObserver(web_contents),
is_starred_(false),
......
......@@ -56,6 +56,7 @@ class BookmarkTabHelper
void AddObserver(BookmarkTabHelperObserver* observer);
void RemoveObserver(BookmarkTabHelperObserver* observer);
bool HasObserver(BookmarkTabHelperObserver* observer) const;
private:
friend class content::WebContentsUserData<BookmarkTabHelper>;
......
......@@ -1874,7 +1874,7 @@ willAnimateFromState:(BookmarkBar::State)oldState
}
- (void)setBrowserWindowTouchBar:(BrowserWindowTouchBar*)touchBar {
touchBar_.reset(touchBar);
touchBar_.reset([touchBar retain]);
}
- (void)executeExtensionCommand:(const std::string&)extension_id
......
......@@ -10,6 +10,7 @@
#include "base/mac/availability.h"
#import "ui/base/cocoa/touch_bar_forward_declarations.h"
class BookmarkTabHelperObserver;
class Browser;
@class BrowserWindowController;
......@@ -53,6 +54,10 @@ class Browser;
// it's null.
- (NSSegmentedControl*)backForwardControl;
// Returns the bridge object that BrowserWindowTouchBar uses to receive
// notifications.
- (BookmarkTabHelperObserver*)bookmarkTabObserver;
@end
#endif // CHROME_BROWSER_UI_COCOA_BROWSER_WINDOW_TOUCH_BAR_H_
......@@ -616,4 +616,8 @@ class BrowserTouchBarNotificationBridge : public CommandObserver,
return backForwardControl_.get();
}
- (BookmarkTabHelperObserver*)bookmarkTabObserver {
return notificationBridge_.get();
}
@end
......@@ -3,6 +3,8 @@
// found in the LICENSE file.
#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_window.h"
#import "chrome/browser/ui/cocoa/browser_window_controller.h"
......@@ -27,19 +29,23 @@ class BrowserWindowTouchBarTest : public InProcessBrowserTest {
BrowserWindowTouchBarTest() : InProcessBrowserTest() {}
void SetUpOnMainThread() override {
// Ownership is passed to BrowserWindowController in
// -setBrowserWindowTouchBar:
browser_touch_bar_ = [[BrowserWindowTouchBar alloc]
browser_touch_bar_.reset([[BrowserWindowTouchBar alloc]
initWithBrowser:browser()
window:[browser_window_controller() window]];
[browser_window_controller() setBrowserWindowTouchBar:browser_touch_bar_];
window:[browser_window_controller() window]]);
[browser_window_controller()
setBrowserWindowTouchBar:browser_touch_bar_.get()];
}
void TearDownOnMainThread() override {
[browser_window_controller() setBrowserWindowTouchBar:nil];
DestroyBrowserWindowTouchBar();
InProcessBrowserTest::TearDownOnMainThread();
}
void DestroyBrowserWindowTouchBar() {
[browser_window_controller() setBrowserWindowTouchBar:nil];
browser_touch_bar_.reset();
}
BrowserWindowController* browser_window_controller() {
return [BrowserWindowController
browserWindowControllerForWindow:browser()
......@@ -52,7 +58,7 @@ class BrowserWindowTouchBarTest : public InProcessBrowserTest {
}
private:
BrowserWindowTouchBar* browser_touch_bar_;
base::scoped_nsobject<BrowserWindowTouchBar> browser_touch_bar_;
test::ScopedMacViewsBrowserMode cocoa_browser_mode_{false};
......@@ -99,3 +105,24 @@ IN_PROC_BROWSER_TEST_F(BrowserWindowTouchBarTest, SearchEngineChanges) {
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