Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(133)

Side by Side Diff: chrome/browser/extensions/api/tabs/tabs_test.cc

Issue 2921753002: NOT YET READY: Making chrome.windows.create establish an actual "opener" relationship.
Patch Set: Fix incognito profile transitions Created 3 years, 6 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include <limits.h> 5 #include <limits.h>
6 #include <stddef.h> 6 #include <stddef.h>
7 #include <stdint.h> 7 #include <stdint.h>
8 8
9 #include <memory> 9 #include <memory>
10 #include <string> 10 #include <string>
(...skipping 27 matching lines...) Expand all
38 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h" 38 #include "chrome/browser/ui/zoom/chrome_zoom_level_prefs.h"
39 #include "chrome/test/base/ui_test_utils.h" 39 #include "chrome/test/base/ui_test_utils.h"
40 #include "components/prefs/pref_service.h" 40 #include "components/prefs/pref_service.h"
41 #include "content/public/browser/browser_context.h" 41 #include "content/public/browser/browser_context.h"
42 #include "content/public/browser/notification_service.h" 42 #include "content/public/browser/notification_service.h"
43 #include "content/public/browser/render_frame_host.h" 43 #include "content/public/browser/render_frame_host.h"
44 #include "content/public/browser/storage_partition.h" 44 #include "content/public/browser/storage_partition.h"
45 #include "content/public/common/page_zoom.h" 45 #include "content/public/common/page_zoom.h"
46 #include "content/public/common/url_constants.h" 46 #include "content/public/common/url_constants.h"
47 #include "content/public/test/browser_test_utils.h" 47 #include "content/public/test/browser_test_utils.h"
48 #include "content/public/test/test_navigation_observer.h"
48 #include "extensions/browser/api_test_utils.h" 49 #include "extensions/browser/api_test_utils.h"
49 #include "extensions/browser/app_window/app_window.h" 50 #include "extensions/browser/app_window/app_window.h"
50 #include "extensions/browser/app_window/app_window_registry.h" 51 #include "extensions/browser/app_window/app_window_registry.h"
51 #include "extensions/common/manifest_constants.h" 52 #include "extensions/common/manifest_constants.h"
52 #include "extensions/common/test_util.h" 53 #include "extensions/common/test_util.h"
53 #include "extensions/test/extension_test_message_listener.h" 54 #include "extensions/test/extension_test_message_listener.h"
54 #include "extensions/test/result_catcher.h" 55 #include "extensions/test/result_catcher.h"
55 #include "net/test/embedded_test_server/embedded_test_server.h" 56 #include "net/test/embedded_test_server/embedded_test_server.h"
56 #include "ui/base/window_open_disposition.h" 57 #include "ui/base/window_open_disposition.h"
57 #include "ui/gfx/geometry/rect.h" 58 #include "ui/gfx/geometry/rect.h"
(...skipping 2084 matching lines...) Expand 10 before | Expand all | Expand 10 after
2142 browser()->tab_strip_model()->ActivateTabAt(0, true); 2143 browser()->tab_strip_model()->ActivateTabAt(0, true);
2143 EXPECT_EQ(first_web_contents, 2144 EXPECT_EQ(first_web_contents,
2144 browser()->tab_strip_model()->GetActiveWebContents()); 2145 browser()->tab_strip_model()->GetActiveWebContents());
2145 browser()->tab_strip_model()->ActivateTabAt(1, true); 2146 browser()->tab_strip_model()->ActivateTabAt(1, true);
2146 EXPECT_EQ(second_web_contents, 2147 EXPECT_EQ(second_web_contents,
2147 browser()->tab_strip_model()->GetActiveWebContents()); 2148 browser()->tab_strip_model()->GetActiveWebContents());
2148 2149
2149 EXPECT_EQ(url, second_web_contents->GetVisibleURL()); 2150 EXPECT_EQ(url, second_web_contents->GetVisibleURL());
2150 } 2151 }
2151 2152
2152 // Window created by chrome.windows.create should be in the same SiteInstance 2153 // Window created by chrome.windows.create should be in the same
2153 // and BrowsingInstance as the opener - this is a regression test for 2154 // BrowsingInstance as the opener - this is a regression test for
2154 // https://crbug.com/597750. 2155 // https://crbug.com/597750.
2155 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowsCreateVsSiteInstance) { 2156 IN_PROC_BROWSER_TEST_F(ExtensionApiTest, WindowsCreateVsBrowsingInstance) {
2156 const extensions::Extension* extension = 2157 const extensions::Extension* extension =
2157 LoadExtension(test_data_dir_.AppendASCII("../simple_with_file")); 2158 LoadExtension(test_data_dir_.AppendASCII("../simple_with_file"));
2158 ASSERT_TRUE(extension); 2159 ASSERT_TRUE(extension);
2159 2160
2160 // Navigate a tab to an extension page. 2161 // Navigate a tab to an extension page.
2161 GURL extension_url = extension->GetResourceURL("file.html"); 2162 GURL extension_url = extension->GetResourceURL("file.html");
2162 ui_test_utils::NavigateToURL(browser(), extension_url); 2163 ui_test_utils::NavigateToURL(browser(), extension_url);
2163 content::WebContents* old_contents = 2164 content::WebContents* old_contents =
2164 browser()->tab_strip_model()->GetActiveWebContents(); 2165 browser()->tab_strip_model()->GetActiveWebContents();
2165 2166
2166 // Execute chrome.windows.create and store the new tab in |new_contents|. 2167 // Execute chrome.windows.create and store the new tab in |new_contents|.
2167 content::WebContents* new_contents = nullptr; 2168 content::WebContents* new_contents = nullptr;
2168 { 2169 {
2169 content::WebContentsAddedObserver observer; 2170 content::WebContentsAddedObserver observer;
2170 ASSERT_TRUE(content::ExecuteScript(old_contents, 2171 ASSERT_TRUE(content::ExecuteScript(old_contents,
2171 "window.name = 'old-contents';\n" 2172 "window.name = 'old-contents';\n"
2172 "chrome.windows.create({url: '" + 2173 "chrome.windows.create({url: '" +
2173 extension_url.spec() + "'})")); 2174 extension_url.spec() + "'})"));
2174 new_contents = observer.GetWebContents(); 2175 new_contents = observer.GetWebContents();
2175 ASSERT_TRUE(content::WaitForLoadStop(new_contents)); 2176 ASSERT_TRUE(content::WaitForLoadStop(new_contents));
2176 } 2177 }
2177 2178
2179 // Navigate the old and the new tab to a web URL.
2180 ASSERT_TRUE(StartEmbeddedTestServer());
2181 GURL web_url1 = embedded_test_server()->GetURL("/title1.html");
2182 GURL web_url2 = embedded_test_server()->GetURL("/title2.html");
2183 {
2184 content::TestNavigationObserver nav_observer(new_contents, 1);
2185 ASSERT_TRUE(content::ExecuteScript(
2186 new_contents, "window.location = '" + web_url1.spec() + "';"));
2187 nav_observer.Wait();
2188 }
2189 {
2190 content::TestNavigationObserver nav_observer(old_contents, 1);
2191 ASSERT_TRUE(content::ExecuteScript(
2192 old_contents, "window.location = '" + web_url2.spec() + "';"));
2193 nav_observer.Wait();
2194 }
2195 EXPECT_EQ(web_url1, new_contents->GetMainFrame()->GetLastCommittedURL());
2196 EXPECT_EQ(web_url2, old_contents->GetMainFrame()->GetLastCommittedURL());
2197
2178 // Verify that the old and new tab are in the same process and SiteInstance. 2198 // Verify that the old and new tab are in the same process and SiteInstance.
Charlie Reis 2017/06/05 21:06:28 nit: Remove "and SiteInstance" if we aren't checki
Łukasz Anforowicz 2017/06/05 22:06:54 Done.
2179 // Note: both test assertions are important - one observed failure mode was
2180 // having the same process, but different SiteInstance.
2181 EXPECT_EQ(old_contents->GetMainFrame()->GetProcess(), 2199 EXPECT_EQ(old_contents->GetMainFrame()->GetProcess(),
2182 new_contents->GetMainFrame()->GetProcess()); 2200 new_contents->GetMainFrame()->GetProcess());
2183 EXPECT_EQ(old_contents->GetMainFrame()->GetSiteInstance(),
2184 new_contents->GetMainFrame()->GetSiteInstance());
2185 2201
2186 // Verify that the |new_contents| doesn't have a |window.opener| set. 2202 // Verify the old and new contents are in the same browsing instance.
Charlie Reis 2017/06/05 21:06:28 nit: BrowsingInstance
Łukasz Anforowicz 2017/06/05 22:06:54 Done.
2187 bool window_opener_cast_to_bool = true; 2203 EXPECT_TRUE(
2188 EXPECT_TRUE(ExecuteScriptAndExtractBool( 2204 old_contents->GetMainFrame()->GetSiteInstance()->IsRelatedSiteInstance(
2189 new_contents, "window.domAutomationController.send(!!window.opener)", 2205 new_contents->GetMainFrame()->GetSiteInstance()));
2190 &window_opener_cast_to_bool)); 2206
2191 EXPECT_FALSE(window_opener_cast_to_bool); 2207 // Verify that the |new_contents| has |window.opener| set.
2208 std::string location_of_opener;
2209 EXPECT_TRUE(ExecuteScriptAndExtractString(
2210 new_contents,
2211 "window.domAutomationController.send(window.opener.location.href)",
2212 &location_of_opener));
2213 EXPECT_EQ(old_contents->GetMainFrame()->GetLastCommittedURL().spec(),
2214 location_of_opener);
2192 2215
2193 // Verify that |new_contents| can find |old_contents| using window.open/name. 2216 // Verify that |new_contents| can find |old_contents| using window.open/name.
2194 std::string location_of_other_window; 2217 std::string location_of_other_window;
2195 EXPECT_TRUE(ExecuteScriptAndExtractString( 2218 EXPECT_TRUE(ExecuteScriptAndExtractString(
2196 new_contents, 2219 new_contents,
2197 "var w = window.open('', 'old-contents');\n" 2220 "var w = window.open('', 'old-contents');\n"
2198 "window.domAutomationController.send(w.location.href);", 2221 "window.domAutomationController.send(w.location.href);",
2199 &location_of_other_window)); 2222 &location_of_other_window));
2200 EXPECT_EQ(old_contents->GetMainFrame()->GetLastCommittedURL().spec(), 2223 EXPECT_EQ(old_contents->GetMainFrame()->GetLastCommittedURL().spec(),
2201 location_of_other_window); 2224 location_of_other_window);
2202 } 2225 }
2203 2226
2204 } // namespace extensions 2227 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698