Commit a634a6ec authored by Scott Violet's avatar Scott Violet Committed by Commit Bot

weblayer: adds test coverage for deleting tab

Specifically in NewTabDelegate.

BUG=1134224
TEST=covered by tests

Change-Id: Icb3dcd49b70e27fc363b9a4a325daa51280f1f87
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2446716Reviewed-by: default avatarClark DuVall <cduvall@chromium.org>
Reviewed-by: default avatarJohn Abd-El-Malek <jam@chromium.org>
Commit-Queue: Scott Violet <sky@chromium.org>
Cr-Commit-Position: refs/heads/master@{#813844}
parent 7590c42c
......@@ -11,8 +11,10 @@ import org.junit.Rule;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.chromium.base.test.util.CallbackHelper;
import org.chromium.content_public.browser.test.util.CriteriaHelper;
import org.chromium.content_public.browser.test.util.TestThreadUtils;
import org.chromium.weblayer.NewTabCallback;
import org.chromium.weblayer.Tab;
import org.chromium.weblayer.shell.InstrumentationActivity;
......@@ -49,6 +51,31 @@ public class NewTabCallbackTest {
});
}
@Test
@SmallTest
public void testDestroyTabInOnNewTab() throws Throwable {
String url = mActivityTestRule.getTestDataURL("new_browser.html");
mActivity = mActivityTestRule.launchShellWithUrl(url);
Assert.assertNotNull(mActivity);
CallbackHelper callbackHelper = new CallbackHelper();
TestThreadUtils.runOnUiThreadBlocking(() -> {
Tab tab = mActivity.getBrowser().getActiveTab();
tab.setNewTabCallback(new NewTabCallback() {
@Override
public void onNewTab(Tab newTab, int mode) {
newTab.getBrowser().destroyTab(newTab);
Assert.assertTrue(newTab.isDestroyed());
Assert.assertEquals(1, mActivity.getBrowser().getTabs().size());
Assert.assertFalse(mActivity.getBrowser().getActiveTab().isDestroyed());
callbackHelper.notifyCalled();
}
});
});
EventUtils.simulateTouchCenterOfView(mActivity.getWindow().getDecorView());
callbackHelper.waitForFirst();
}
@Test
@SmallTest
public void testNewTabHasFocus() {
......
// Copyright 2020 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 "weblayer/public/new_tab_delegate.h"
#include "base/strings/stringprintf.h"
#include "net/test/embedded_test_server/embedded_test_server.h"
#include "weblayer/browser/tab_impl.h"
#include "weblayer/public/browser.h"
#include "weblayer/public/new_tab_delegate.h"
#include "weblayer/public/tab.h"
#include "weblayer/shell/browser/shell.h"
#include "weblayer/test/weblayer_browser_test.h"
#include "weblayer/test/weblayer_browser_test_utils.h"
namespace weblayer {
namespace {
class DestroyingNewTabDelegate : public NewTabDelegate {
public:
void WaitForOnNewTab() { run_loop_.Run(); }
bool was_on_new_tab_called() const { return was_on_new_tab_called_; }
// NewTabDelegate:
void OnNewTab(Tab* new_tab, NewTabType type) override {
was_on_new_tab_called_ = true;
new_tab->GetBrowser()->DestroyTab(new_tab);
run_loop_.Quit();
}
private:
base::RunLoop run_loop_;
bool was_on_new_tab_called_ = false;
};
} // namespace
using NewTabDelegateTest = WebLayerBrowserTest;
IN_PROC_BROWSER_TEST_F(NewTabDelegateTest, DestroyTabOnNewTab) {
ASSERT_TRUE(embedded_test_server()->Start());
NavigateAndWaitForCompletion(embedded_test_server()->GetURL("/echo"),
shell()->tab());
DestroyingNewTabDelegate new_tab_delegate;
shell()->tab()->SetNewTabDelegate(&new_tab_delegate);
GURL popup_url = embedded_test_server()->GetURL("/echo?popup");
ExecuteScriptWithUserGesture(
shell()->tab(),
base::StringPrintf("window.open('%s')", popup_url.spec().c_str()));
new_tab_delegate.WaitForOnNewTab();
EXPECT_TRUE(new_tab_delegate.was_on_new_tab_called());
EXPECT_EQ(1u, shell()->tab()->GetBrowser()->GetTabs().size());
}
} // namespace weblayer
......@@ -401,6 +401,10 @@ void TabImpl::RemoveDataObserver(DataObserver* observer) {
data_observers_.RemoveObserver(observer);
}
Browser* TabImpl::GetBrowser() {
return browser_;
}
void TabImpl::SetErrorPageDelegate(ErrorPageDelegate* delegate) {
error_page_delegate_ = delegate;
}
......
......@@ -214,6 +214,7 @@ class TabImpl : public Tab,
}
// Tab:
Browser* GetBrowser() override;
void SetErrorPageDelegate(ErrorPageDelegate* delegate) override;
void SetFullscreenDelegate(FullscreenDelegate* delegate) override;
void SetNewTabDelegate(NewTabDelegate* delegate) override;
......
......@@ -25,6 +25,7 @@ class WebView;
#endif
namespace weblayer {
class Browser;
class ErrorPageDelegate;
class FaviconFetcher;
class FaviconFetcherDelegate;
......@@ -40,6 +41,9 @@ class Tab {
public:
virtual ~Tab() = default;
// Returns the Browser that owns this.
virtual Browser* GetBrowser() = 0;
// Sets the ErrorPageDelegate. If none is set, a default action will be taken
// for any given interaction with an error page.
virtual void SetErrorPageDelegate(ErrorPageDelegate* delegate) = 0;
......
......@@ -142,6 +142,7 @@ test("weblayer_browsertests") {
"../browser/js_communication/web_message_browsertest.cc",
"../browser/navigation_browsertest.cc",
"../browser/navigation_error_navigation_throttle_browsertest.cc",
"../browser/new_tab_delegate_browsertest.cc",
"../browser/no_state_prefetch/no_state_prefetch_browsertest.cc",
"../browser/page_load_metrics_browsertest.cc",
"../browser/popup_blocker_browsertest.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