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..fe8fe2d93b108d977284f52d94b38e837bd68f78 100644 |
--- a/chrome/browser/app_controller_mac_browsertest.mm |
+++ b/chrome/browser/app_controller_mac_browsertest.mm |
@@ -41,6 +41,36 @@ 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(g_open_shortcut_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,36 @@ IN_PROC_BROWSER_TEST_F(AppControllerOpenShortcutBrowserTest, |
->GetLastCommittedURL()); |
} |
+class AppControllerReplaceNTPBrowserTest : public InProcessBrowserTest { |
+ protected: |
+ AppControllerReplaceNTPBrowserTest() {} |
+}; |
+ |
+// 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); |
+ ui_test_utils::NavigateToURLWithDisposition( |
+ browser(), |
+ ntp, |
+ CURRENT_TAB, |
+ ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION); |
+ 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); |
+ EXPECT_EQ(1, browser()->tab_strip_model()->count()); |
+ EXPECT_EQ(simple, |
+ browser() |
+ ->tab_strip_model() |
+ ->GetActiveWebContents() |
+ ->GetLastCommittedURL()); |
+} |
+ |
} // namespace |