| Index: chrome/browser/extensions/isolated_app_browsertest.cc
|
| diff --git a/chrome/browser/extensions/isolated_app_browsertest.cc b/chrome/browser/extensions/isolated_app_browsertest.cc
|
| index a4d0cf5c5d4b949dbb3969221aa9eb3f3f1c1327..47bb6247cb97162c2cd39067c4c1b57312b33c12 100644
|
| --- a/chrome/browser/extensions/isolated_app_browsertest.cc
|
| +++ b/chrome/browser/extensions/isolated_app_browsertest.cc
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "base/utf_string_conversions.h"
|
| #include "chrome/browser/automation/automation_util.h"
|
| +#include "chrome/browser/browser_process.h"
|
| #include "chrome/browser/extensions/extension_apitest.h"
|
| #include "chrome/browser/extensions/extension_host.h"
|
| #include "chrome/browser/extensions/extension_service.h"
|
| @@ -11,16 +12,20 @@
|
| #include "chrome/browser/ui/browser.h"
|
| #include "chrome/browser/ui/browser_commands.h"
|
| #include "chrome/browser/ui/browser_tabstrip.h"
|
| +#include "chrome/browser/ui/browser_window.h"
|
| #include "chrome/browser/ui/tab_contents/tab_contents.h"
|
| +#include "chrome/common/chrome_notification_types.h"
|
| #include "chrome/common/chrome_switches.h"
|
| #include "chrome/common/url_constants.h"
|
| #include "chrome/test/base/ui_test_utils.h"
|
| +#include "content/public/browser/notification_service.h"
|
| #include "content/public/browser/render_process_host.h"
|
| #include "content/public/browser/render_view_host.h"
|
| #include "content/public/browser/site_instance.h"
|
| #include "content/public/browser/web_contents.h"
|
| #include "content/public/test/browser_test_utils.h"
|
| #include "net/base/mock_host_resolver.h"
|
| +#include "content/public/test/test_navigation_observer.h"
|
|
|
| using content::ExecuteJavaScript;
|
| using content::ExecuteJavaScriptAndExtractString;
|
| @@ -59,6 +64,40 @@ class IsolatedAppTest : public ExtensionBrowserTest {
|
| return installed_app;
|
| }
|
|
|
| + void CloseBrowserSynchronously() {
|
| + content::WindowedNotificationObserver observer(
|
| + chrome::NOTIFICATION_BROWSER_CLOSED,
|
| + content::NotificationService::AllSources());
|
| + browser()->window()->Close();
|
| +#if defined(OS_MACOSX)
|
| + // BrowserWindowController depends on the auto release pool being recycled
|
| + // in the message loop to delete itself, which frees the Browser object
|
| + // which fires this event.
|
| + AutoreleasePool()->Recycle();
|
| +#endif
|
| + observer.Wait();
|
| + }
|
| +
|
| + Browser* QuitBrowserAndRestore(int expected_tab_count) {
|
| + Profile* profile = browser()->profile();
|
| +
|
| + // Close the browser.
|
| + g_browser_process->AddRefModule();
|
| + CloseBrowserSynchronously();
|
| +
|
| + // Create a new window, which should trigger session restore.
|
| + ui_test_utils::BrowserAddedObserver window_observer;
|
| + content::TestNavigationObserver navigation_observer(
|
| + content::NotificationService::AllSources(), NULL, expected_tab_count);
|
| + chrome::NewEmptyWindow(profile);
|
| + Browser* new_browser = window_observer.WaitForSingleNewBrowser();
|
| + navigation_observer.Wait();
|
| + g_browser_process->ReleaseModule();
|
| + set_browser(new_browser);
|
| +
|
| + return new_browser;
|
| + }
|
| +
|
| private:
|
| virtual void SetUpCommandLine(CommandLine* command_line) {
|
| ExtensionBrowserTest::SetUpCommandLine(command_line);
|
| @@ -368,4 +407,34 @@ IN_PROC_BROWSER_TEST_F(IsolatedAppTest, SessionStorage) {
|
| chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(),
|
| L"", kRetrieveSessionStorage.c_str(), &result));
|
| EXPECT_EQ("ss_normal", result);
|
| +
|
| + // TODO(ajwong): Whack the browser and resart.
|
| + QuitBrowserAndRestore(1);
|
| +
|
| + ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("isolated_apps/app1")));
|
| + ASSERT_TRUE(LoadExtension(test_data_dir_.AppendASCII("isolated_apps/app2")));
|
| +
|
| + ui_test_utils::NavigateToURLWithDisposition(
|
| + browser(), base_url.Resolve("app1/main.html"),
|
| + CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
|
| + ASSERT_TRUE(ExecuteJavaScriptAndExtractString(
|
| + chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(),
|
| + L"", kRetrieveSessionStorage.c_str(), &result));
|
| + EXPECT_EQ("ss_app1", result);
|
| +
|
| + ui_test_utils::NavigateToURLWithDisposition(
|
| + browser(), base_url.Resolve("app2/main.html"),
|
| + CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
|
| + ASSERT_TRUE(ExecuteJavaScriptAndExtractString(
|
| + chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(),
|
| + L"", kRetrieveSessionStorage.c_str(), &result));
|
| + EXPECT_EQ("ss_app2", result);
|
| +
|
| + ui_test_utils::NavigateToURLWithDisposition(
|
| + browser(), base_url.Resolve("non_app/main.html"),
|
| + CURRENT_TAB, ui_test_utils::BROWSER_TEST_WAIT_FOR_NAVIGATION);
|
| + ASSERT_TRUE(ExecuteJavaScriptAndExtractString(
|
| + chrome::GetWebContentsAt(browser(), 0)->GetRenderViewHost(),
|
| + L"", kRetrieveSessionStorage.c_str(), &result));
|
| + EXPECT_EQ("ss_normal", result);
|
| }
|
|
|