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

Side by Side Diff: chrome/browser/extensions/app_process_apitest.cc

Issue 9473001: Extract minimal RenderViewHost interface for embedders, leaving (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Ready for initial review. Created 8 years, 9 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 | Annotate | Revision Log
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 "base/utf_string_conversions.h" 5 #include "base/utf_string_conversions.h"
6 #include "chrome/browser/extensions/extension_apitest.h" 6 #include "chrome/browser/extensions/extension_apitest.h"
7 #include "chrome/browser/extensions/extension_host.h" 7 #include "chrome/browser/extensions/extension_host.h"
8 #include "chrome/browser/extensions/extension_service.h" 8 #include "chrome/browser/extensions/extension_service.h"
9 #include "chrome/browser/extensions/process_map.h" 9 #include "chrome/browser/extensions/process_map.h"
10 #include "chrome/browser/profiles/profile.h" 10 #include "chrome/browser/profiles/profile.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
57 // The above window.open call is not user-initiated, it will create 57 // The above window.open call is not user-initiated, it will create
58 // a popup window instead of a new tab in current window. 58 // a popup window instead of a new tab in current window.
59 // Now the active tab in last active window should be the new tab. 59 // Now the active tab in last active window should be the new tab.
60 Browser* last_active_browser = BrowserList::GetLastActive(); 60 Browser* last_active_browser = BrowserList::GetLastActive();
61 EXPECT_TRUE(last_active_browser); 61 EXPECT_TRUE(last_active_browser);
62 WebContents* newtab = last_active_browser->GetSelectedWebContents(); 62 WebContents* newtab = last_active_browser->GetSelectedWebContents();
63 EXPECT_TRUE(newtab); 63 EXPECT_TRUE(newtab);
64 observer.Wait(); 64 observer.Wait();
65 EXPECT_EQ(url, newtab->GetController().GetLastCommittedEntry()->GetURL()); 65 EXPECT_EQ(url, newtab->GetController().GetLastCommittedEntry()->GetURL());
66 if (newtab_process_should_equal_opener) 66 if (newtab_process_should_equal_opener)
67 EXPECT_EQ(opener_host->process(), newtab->GetRenderProcessHost()); 67 EXPECT_EQ(opener_host->GetProcess(), newtab->GetRenderProcessHost());
68 else 68 else
69 EXPECT_NE(opener_host->process(), newtab->GetRenderProcessHost()); 69 EXPECT_NE(opener_host->GetProcess(), newtab->GetRenderProcessHost());
70 } 70 }
71 71
72 // Simulates a page navigating itself to an URL, and waits for the navigation. 72 // Simulates a page navigating itself to an URL, and waits for the navigation.
73 static void NavigateTabHelper(WebContents* contents, const GURL& url) { 73 static void NavigateTabHelper(WebContents* contents, const GURL& url) {
74 bool result = false; 74 bool result = false;
75 ui_test_utils::WindowedNotificationObserver observer( 75 ui_test_utils::WindowedNotificationObserver observer(
76 content::NOTIFICATION_LOAD_STOP, 76 content::NOTIFICATION_LOAD_STOP,
77 content::NotificationService::AllSources()); 77 content::NotificationService::AllSources());
78 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 78 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
79 contents->GetRenderViewHost(), L"", 79 contents->GetRenderViewHost(), L"",
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
137 browser()->GetWebContentsAt(3)->GetRenderProcessHost()->GetID())); 137 browser()->GetWebContentsAt(3)->GetRenderProcessHost()->GetID()));
138 EXPECT_FALSE(browser()->GetWebContentsAt(3)->GetWebUI()); 138 EXPECT_FALSE(browser()->GetWebContentsAt(3)->GetWebUI());
139 139
140 // We should have opened 3 new extension tabs. Including the original blank 140 // We should have opened 3 new extension tabs. Including the original blank
141 // tab, we now have 4 tabs. Because the app_process app has the background 141 // tab, we now have 4 tabs. Because the app_process app has the background
142 // permission, all of its instances are in the same process. Thus two tabs 142 // permission, all of its instances are in the same process. Thus two tabs
143 // should be part of the extension app and grouped in the same process. 143 // should be part of the extension app and grouped in the same process.
144 ASSERT_EQ(4, browser()->tab_count()); 144 ASSERT_EQ(4, browser()->tab_count());
145 RenderViewHost* host = browser()->GetWebContentsAt(1)->GetRenderViewHost(); 145 RenderViewHost* host = browser()->GetWebContentsAt(1)->GetRenderViewHost();
146 146
147 EXPECT_EQ(host->process(), 147 EXPECT_EQ(host->GetProcess(),
148 browser()->GetWebContentsAt(2)->GetRenderProcessHost()); 148 browser()->GetWebContentsAt(2)->GetRenderProcessHost());
149 EXPECT_NE(host->process(), 149 EXPECT_NE(host->GetProcess(),
150 browser()->GetWebContentsAt(3)->GetRenderProcessHost()); 150 browser()->GetWebContentsAt(3)->GetRenderProcessHost());
151 151
152 // Now let's do the same using window.open. The same should happen. 152 // Now let's do the same using window.open. The same should happen.
153 ASSERT_EQ(1u, BrowserList::GetBrowserCount(browser()->profile())); 153 ASSERT_EQ(1u, BrowserList::GetBrowserCount(browser()->profile()));
154 WindowOpenHelper(browser(), host, 154 WindowOpenHelper(browser(), host,
155 base_url.Resolve("path1/empty.html"), true); 155 base_url.Resolve("path1/empty.html"), true);
156 LOG(INFO) << "WindowOpenHelper 1."; 156 LOG(INFO) << "WindowOpenHelper 1.";
157 WindowOpenHelper(browser(), host, 157 WindowOpenHelper(browser(), host,
158 base_url.Resolve("path2/empty.html"), true); 158 base_url.Resolve("path2/empty.html"), true);
159 LOG(INFO) << "WindowOpenHelper 2."; 159 LOG(INFO) << "WindowOpenHelper 2.";
160 // TODO(creis): This should open in a new process (i.e., false for the last 160 // TODO(creis): This should open in a new process (i.e., false for the last
161 // argument), but we temporarily avoid swapping processes away from an app 161 // argument), but we temporarily avoid swapping processes away from an app
162 // until we're able to support cross-process postMessage calls. 162 // until we're able to support cross-process postMessage calls.
163 // See crbug.com/59285. 163 // See crbug.com/59285.
164 WindowOpenHelper(browser(), host, 164 WindowOpenHelper(browser(), host,
165 base_url.Resolve("path3/empty.html"), true); 165 base_url.Resolve("path3/empty.html"), true);
166 LOG(INFO) << "WindowOpenHelper 3."; 166 LOG(INFO) << "WindowOpenHelper 3.";
167 167
168 // Now let's have these pages navigate, into or out of the extension web 168 // Now let's have these pages navigate, into or out of the extension web
169 // extent. They should switch processes. 169 // extent. They should switch processes.
170 const GURL& app_url(base_url.Resolve("path1/empty.html")); 170 const GURL& app_url(base_url.Resolve("path1/empty.html"));
171 const GURL& non_app_url(base_url.Resolve("path3/empty.html")); 171 const GURL& non_app_url(base_url.Resolve("path3/empty.html"));
172 NavigateTabHelper(browser()->GetWebContentsAt(2), non_app_url); 172 NavigateTabHelper(browser()->GetWebContentsAt(2), non_app_url);
173 LOG(INFO) << "NavigateTabHelper 1."; 173 LOG(INFO) << "NavigateTabHelper 1.";
174 NavigateTabHelper(browser()->GetWebContentsAt(3), app_url); 174 NavigateTabHelper(browser()->GetWebContentsAt(3), app_url);
175 LOG(INFO) << "NavigateTabHelper 2."; 175 LOG(INFO) << "NavigateTabHelper 2.";
176 // TODO(creis): This should swap out of the app's process (i.e., EXPECT_NE), 176 // TODO(creis): This should swap out of the app's process (i.e., EXPECT_NE),
177 // but we temporarily avoid swapping away from an app in case the window 177 // but we temporarily avoid swapping away from an app in case the window
178 // tries to send a postMessage to the app. See crbug.com/59285. 178 // tries to send a postMessage to the app. See crbug.com/59285.
179 EXPECT_EQ(host->process(), 179 EXPECT_EQ(host->GetProcess(),
180 browser()->GetWebContentsAt(2)->GetRenderProcessHost()); 180 browser()->GetWebContentsAt(2)->GetRenderProcessHost());
181 EXPECT_EQ(host->process(), 181 EXPECT_EQ(host->GetProcess(),
182 browser()->GetWebContentsAt(3)->GetRenderProcessHost()); 182 browser()->GetWebContentsAt(3)->GetRenderProcessHost());
183 183
184 // If one of the popup tabs navigates back to the app, window.opener should 184 // If one of the popup tabs navigates back to the app, window.opener should
185 // be valid. 185 // be valid.
186 NavigateTabHelper(browser()->GetWebContentsAt(6), app_url); 186 NavigateTabHelper(browser()->GetWebContentsAt(6), app_url);
187 LOG(INFO) << "NavigateTabHelper 3."; 187 LOG(INFO) << "NavigateTabHelper 3.";
188 EXPECT_EQ(host->process(), 188 EXPECT_EQ(host->GetProcess(),
189 browser()->GetWebContentsAt(6)->GetRenderProcessHost()); 189 browser()->GetWebContentsAt(6)->GetRenderProcessHost());
190 bool windowOpenerValid = false; 190 bool windowOpenerValid = false;
191 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 191 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
192 browser()->GetWebContentsAt(6)->GetRenderViewHost(), L"", 192 browser()->GetWebContentsAt(6)->GetRenderViewHost(), L"",
193 L"window.domAutomationController.send(window.opener != null)", 193 L"window.domAutomationController.send(window.opener != null)",
194 &windowOpenerValid)); 194 &windowOpenerValid));
195 ASSERT_TRUE(windowOpenerValid); 195 ASSERT_TRUE(windowOpenerValid);
196 196
197 LOG(INFO) << "End of test."; 197 LOG(INFO) << "End of test.";
198 } 198 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
240 browser()->GetWebContentsAt(2)->GetRenderProcessHost()->GetID())); 240 browser()->GetWebContentsAt(2)->GetRenderProcessHost()->GetID()));
241 EXPECT_FALSE(browser()->GetWebContentsAt(2)->GetWebUI()); 241 EXPECT_FALSE(browser()->GetWebContentsAt(2)->GetWebUI());
242 242
243 // We should have opened 2 new extension tabs. Including the original blank 243 // We should have opened 2 new extension tabs. Including the original blank
244 // tab, we now have 3 tabs. The two app tabs should not be in the same 244 // tab, we now have 3 tabs. The two app tabs should not be in the same
245 // process, since they do not have the background permission. (Thus, we want 245 // process, since they do not have the background permission. (Thus, we want
246 // to separate them to improve responsiveness.) 246 // to separate them to improve responsiveness.)
247 ASSERT_EQ(3, browser()->tab_count()); 247 ASSERT_EQ(3, browser()->tab_count());
248 RenderViewHost* host1 = browser()->GetWebContentsAt(1)->GetRenderViewHost(); 248 RenderViewHost* host1 = browser()->GetWebContentsAt(1)->GetRenderViewHost();
249 RenderViewHost* host2 = browser()->GetWebContentsAt(2)->GetRenderViewHost(); 249 RenderViewHost* host2 = browser()->GetWebContentsAt(2)->GetRenderViewHost();
250 EXPECT_NE(host1->process(), host2->process()); 250 EXPECT_NE(host1->GetProcess(), host2->GetProcess());
251 251
252 // Opening tabs with window.open should keep the page in the opener's process. 252 // Opening tabs with window.open should keep the page in the opener's process.
253 ASSERT_EQ(1u, BrowserList::GetBrowserCount(browser()->profile())); 253 ASSERT_EQ(1u, BrowserList::GetBrowserCount(browser()->profile()));
254 WindowOpenHelper(browser(), host1, 254 WindowOpenHelper(browser(), host1,
255 base_url.Resolve("path1/empty.html"), true); 255 base_url.Resolve("path1/empty.html"), true);
256 LOG(INFO) << "WindowOpenHelper 1."; 256 LOG(INFO) << "WindowOpenHelper 1.";
257 WindowOpenHelper(browser(), host2, 257 WindowOpenHelper(browser(), host2,
258 base_url.Resolve("path2/empty.html"), true); 258 base_url.Resolve("path2/empty.html"), true);
259 LOG(INFO) << "End of test."; 259 LOG(INFO) << "End of test.";
260 } 260 }
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
302 ui_test_utils::NavigateToURL(browser(), base_url.Resolve("path2/empty.html")); 302 ui_test_utils::NavigateToURL(browser(), base_url.Resolve("path2/empty.html"));
303 EXPECT_FALSE(process_map->Contains( 303 EXPECT_FALSE(process_map->Contains(
304 browser()->GetWebContentsAt(2)->GetRenderProcessHost()->GetID())); 304 browser()->GetWebContentsAt(2)->GetRenderProcessHost()->GetID()));
305 EXPECT_FALSE(browser()->GetWebContentsAt(2)->GetWebUI()); 305 EXPECT_FALSE(browser()->GetWebContentsAt(2)->GetWebUI());
306 306
307 // We should have opened 2 new bookmark app tabs. Including the original blank 307 // We should have opened 2 new bookmark app tabs. Including the original blank
308 // tab, we now have 3 tabs. Because normal pages use the 308 // tab, we now have 3 tabs. Because normal pages use the
309 // process-per-site-instance model, each should be in its own process. 309 // process-per-site-instance model, each should be in its own process.
310 ASSERT_EQ(3, browser()->tab_count()); 310 ASSERT_EQ(3, browser()->tab_count());
311 RenderViewHost* host = browser()->GetWebContentsAt(1)->GetRenderViewHost(); 311 RenderViewHost* host = browser()->GetWebContentsAt(1)->GetRenderViewHost();
312 EXPECT_NE(host->process(), 312 EXPECT_NE(host->GetProcess(),
313 browser()->GetWebContentsAt(2)->GetRenderProcessHost()); 313 browser()->GetWebContentsAt(2)->GetRenderProcessHost());
314 314
315 // Now let's do the same using window.open. The same should happen. 315 // Now let's do the same using window.open. The same should happen.
316 ASSERT_EQ(1u, BrowserList::GetBrowserCount(browser()->profile())); 316 ASSERT_EQ(1u, BrowserList::GetBrowserCount(browser()->profile()));
317 WindowOpenHelper(browser(), host, 317 WindowOpenHelper(browser(), host,
318 base_url.Resolve("path1/empty.html"), true); 318 base_url.Resolve("path1/empty.html"), true);
319 WindowOpenHelper(browser(), host, 319 WindowOpenHelper(browser(), host,
320 base_url.Resolve("path2/empty.html"), true); 320 base_url.Resolve("path2/empty.html"), true);
321 321
322 // Now let's have a tab navigate out of and back into the app's web 322 // Now let's have a tab navigate out of and back into the app's web
323 // extent. Neither navigation should switch processes. 323 // extent. Neither navigation should switch processes.
324 const GURL& app_url(base_url.Resolve("path1/empty.html")); 324 const GURL& app_url(base_url.Resolve("path1/empty.html"));
325 const GURL& non_app_url(base_url.Resolve("path3/empty.html")); 325 const GURL& non_app_url(base_url.Resolve("path3/empty.html"));
326 RenderViewHost* host2 = browser()->GetWebContentsAt(2)->GetRenderViewHost(); 326 RenderViewHost* host2 = browser()->GetWebContentsAt(2)->GetRenderViewHost();
327 NavigateTabHelper(browser()->GetWebContentsAt(2), non_app_url); 327 NavigateTabHelper(browser()->GetWebContentsAt(2), non_app_url);
328 EXPECT_EQ(host2->process(), 328 EXPECT_EQ(host2->GetProcess(),
329 browser()->GetWebContentsAt(2)->GetRenderProcessHost()); 329 browser()->GetWebContentsAt(2)->GetRenderProcessHost());
330 NavigateTabHelper(browser()->GetWebContentsAt(2), app_url); 330 NavigateTabHelper(browser()->GetWebContentsAt(2), app_url);
331 EXPECT_EQ(host2->process(), 331 EXPECT_EQ(host2->GetProcess(),
332 browser()->GetWebContentsAt(2)->GetRenderProcessHost()); 332 browser()->GetWebContentsAt(2)->GetRenderProcessHost());
333 } 333 }
334 334
335 // Tests that app process switching works properly in the following scenario: 335 // Tests that app process switching works properly in the following scenario:
336 // 1. navigate to a page1 in the app 336 // 1. navigate to a page1 in the app
337 // 2. page1 redirects to a page2 outside the app extent (ie, "/server-redirect") 337 // 2. page1 redirects to a page2 outside the app extent (ie, "/server-redirect")
338 // 3. page2 redirects back to a page in the app 338 // 3. page2 redirects back to a page in the app
339 // The final navigation should end up in the app process. 339 // The final navigation should end up in the app process.
340 // See http://crbug.com/61757 340 // See http://crbug.com/61757
341 // This test doesn't complete on WebKit Win (dbg). See crbug.com/108853. 341 // This test doesn't complete on WebKit Win (dbg). See crbug.com/108853.
(...skipping 316 matching lines...) Expand 10 before | Expand all | Expand 10 after
658 &browser()->GetSelectedTabContentsWrapper()->web_contents()-> 658 &browser()->GetSelectedTabContentsWrapper()->web_contents()->
659 GetController())); 659 GetController()));
660 browser()->Reload(CURRENT_TAB); 660 browser()->Reload(CURRENT_TAB);
661 observer.Wait(); 661 observer.Wait();
662 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool( 662 ASSERT_TRUE(ui_test_utils::ExecuteJavaScriptAndExtractBool(
663 contents->GetRenderViewHost(), L"", 663 contents->GetRenderViewHost(), L"",
664 L"window.domAutomationController.send(chrome.app.isInstalled)", 664 L"window.domAutomationController.send(chrome.app.isInstalled)",
665 &is_installed)); 665 &is_installed));
666 ASSERT_TRUE(is_installed); 666 ASSERT_TRUE(is_installed);
667 } 667 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698