| Index: chrome/browser/app_controller_mac_browsertest.mm
|
| diff --git a/chrome/browser/app_controller_mac_browsertest.mm b/chrome/browser/app_controller_mac_browsertest.mm
|
| index f8442c765f5f930221905f2775829d82b536a28c..7916d7de45e58617aea0d0d303e813b574b3359e 100644
|
| --- a/chrome/browser/app_controller_mac_browsertest.mm
|
| +++ b/chrome/browser/app_controller_mac_browsertest.mm
|
| @@ -32,6 +32,7 @@
|
| #include "chrome/test/base/ui_test_utils.h"
|
| #include "components/signin/core/common/profile_management_switches.h"
|
| #include "content/public/browser/web_contents.h"
|
| +#include "content/public/test/test_navigation_observer.h"
|
| #include "extensions/browser/app_window/app_window_registry.h"
|
| #include "extensions/common/extension.h"
|
| #include "extensions/test/extension_test_message_listener.h"
|
| @@ -41,6 +42,35 @@ namespace {
|
|
|
| GURL g_open_shortcut_url = GURL::EmptyGURL();
|
|
|
| +// Returns an Apple Event that instructs the application to open |url|.
|
| +NSAppleEventDescriptor* AppleEventToOpenUrl(const GURL& url) {
|
| + NSAppleEventDescriptor* shortcut_event = [[[NSAppleEventDescriptor alloc]
|
| + initWithEventClass:kASAppleScriptSuite
|
| + eventID:kASSubroutineEvent
|
| + targetDescriptor:nil
|
| + returnID:kAutoGenerateReturnID
|
| + transactionID:kAnyTransactionID] autorelease];
|
| + NSString* url_string = [NSString stringWithUTF8String:url.spec().c_str()];
|
| + [shortcut_event setParamDescriptor:[NSAppleEventDescriptor
|
| + descriptorWithString:url_string]
|
| + forKeyword:keyDirectObject];
|
| + return shortcut_event;
|
| +}
|
| +
|
| +// Instructs the NSApp's delegate to open |url|.
|
| +void SendAppleEventToOpenUrlToAppController(const GURL& url) {
|
| + AppController* controller =
|
| + base::mac::ObjCCast<AppController>([NSApp delegate]);
|
| + Method get_url =
|
| + class_getInstanceMethod([controller class], @selector(getUrl:withReply:));
|
| +
|
| + ASSERT_TRUE(get_url);
|
| +
|
| + NSAppleEventDescriptor* shortcut_event = AppleEventToOpenUrl(url);
|
| +
|
| + method_invoke(controller, get_url, shortcut_event, NULL);
|
| +}
|
| +
|
| } // namespace
|
|
|
| @interface TestOpenShortcutOnStartup : NSObject
|
| @@ -53,28 +83,7 @@ GURL g_open_shortcut_url = GURL::EmptyGURL();
|
| if (!g_open_shortcut_url.is_valid())
|
| return;
|
|
|
| - AppController* controller =
|
| - base::mac::ObjCCast<AppController>([NSApp delegate]);
|
| - Method getUrl = class_getInstanceMethod([controller class],
|
| - @selector(getUrl:withReply:));
|
| -
|
| - if (getUrl == nil)
|
| - return;
|
| -
|
| - base::scoped_nsobject<NSAppleEventDescriptor> shortcutEvent(
|
| - [[NSAppleEventDescriptor alloc]
|
| - initWithEventClass:kASAppleScriptSuite
|
| - eventID:kASSubroutineEvent
|
| - targetDescriptor:nil
|
| - returnID:kAutoGenerateReturnID
|
| - transactionID:kAnyTransactionID]);
|
| - NSString* url =
|
| - [NSString stringWithUTF8String:g_open_shortcut_url.spec().c_str()];
|
| - [shortcutEvent setParamDescriptor:
|
| - [NSAppleEventDescriptor descriptorWithString:url]
|
| - forKeyword:keyDirectObject];
|
| -
|
| - method_invoke(controller, getUrl, shortcutEvent.get(), NULL);
|
| + SendAppleEventToOpenUrlToAppController(g_open_shortcut_url);
|
| }
|
|
|
| @end
|
| @@ -330,4 +339,47 @@ IN_PROC_BROWSER_TEST_F(AppControllerOpenShortcutBrowserTest,
|
| ->GetLastCommittedURL());
|
| }
|
|
|
| +class AppControllerReplaceNTPBrowserTest : public InProcessBrowserTest {
|
| + protected:
|
| + AppControllerReplaceNTPBrowserTest() {}
|
| +
|
| + void SetUpInProcessBrowserTestFixture() override {
|
| + ASSERT_TRUE(embedded_test_server()->InitializeAndWaitUntilReady());
|
| + }
|
| +
|
| + void SetUpCommandLine(CommandLine* command_line) override {
|
| + // If the arg is empty, PrepareTestCommandLine() after this function will
|
| + // append about:blank as default url.
|
| + command_line->AppendArg(chrome::kChromeUINewTabURL);
|
| + }
|
| +};
|
| +
|
| +// Tests that when a GURL is opened after startup, it replaces the NTP.
|
| +IN_PROC_BROWSER_TEST_F(AppControllerReplaceNTPBrowserTest,
|
| + ReplaceNTPAfterStartup) {
|
| + // Ensure that there is exactly 1 tab showing, and the tab is the NTP.
|
| + GURL ntp(chrome::kChromeUINewTabURL);
|
| + EXPECT_EQ(1, browser()->tab_strip_model()->count());
|
| + EXPECT_EQ(ntp,
|
| + browser()
|
| + ->tab_strip_model()
|
| + ->GetActiveWebContents()
|
| + ->GetLastCommittedURL());
|
| +
|
| + GURL simple(embedded_test_server()->GetURL("/simple.html"));
|
| + SendAppleEventToOpenUrlToAppController(simple);
|
| +
|
| + // Wait for one navigation on the active web contents.
|
| + EXPECT_EQ(1, browser()->tab_strip_model()->count());
|
| + content::TestNavigationObserver obs(
|
| + browser()->tab_strip_model()->GetActiveWebContents(), 1);
|
| + obs.Wait();
|
| +
|
| + EXPECT_EQ(simple,
|
| + browser()
|
| + ->tab_strip_model()
|
| + ->GetActiveWebContents()
|
| + ->GetLastCommittedURL());
|
| +}
|
| +
|
| } // namespace
|
|
|