Index: chrome/browser/ui/browser_browsertest.cc |
diff --git a/chrome/browser/ui/browser_browsertest.cc b/chrome/browser/ui/browser_browsertest.cc |
index 732dd24f48e3d999475e930640362e4b37c45233..4c2c8a26134a5e2b8b156c13210e4303ad1ea8a1 100644 |
--- a/chrome/browser/ui/browser_browsertest.cc |
+++ b/chrome/browser/ui/browser_browsertest.cc |
@@ -3122,3 +3122,67 @@ IN_PROC_BROWSER_TEST_F(BrowserTest, SecurityStyleChangedObserverGoBack) { |
EXPECT_FALSE(observer.latest_explanations().displayed_insecure_content); |
EXPECT_FALSE(observer.latest_explanations().ran_insecure_content); |
} |
+ |
+namespace { |
+class JSBooleanResultGetter { |
+public: |
sky
2015/08/31 15:57:27
run git cl format as your spacing is off.
Mikhail
2015/09/01 08:13:46
Done.
|
+ void OnJsExecutionDone(base::Closure callback, const base::Value* value) { |
+ js_result_.reset(value->DeepCopy()); |
+ callback.Run(); |
+ } |
+ bool GetResult() const { |
+ bool res; |
+ CHECK(js_result_); |
+ CHECK(js_result_->GetAsBoolean(&res)); |
+ return res; |
+ } |
+ |
+private: |
+ scoped_ptr<base::Value> js_result_; |
+}; |
sky
2015/08/31 15:57:27
DISALLOW...
Mikhail
2015/09/01 08:13:46
Done.
|
+ |
+void CheckDisplayModeMQ( |
+ const base::string16& display_mode, |
+ content::WebContents* web_contents) { |
+ |
sky
2015/08/31 15:57:27
remove newline.
Mikhail
2015/09/01 08:13:46
Done.
|
+ base::string16 js_funtcion = |
sky
2015/08/31 15:57:27
function
Mikhail
2015/09/01 08:13:46
Done.
|
+ ASCIIToUTF16("(function() {return window.matchMedia('(display-mode: ") + |
+ display_mode + ASCIIToUTF16(")').matches;})();"); |
+ scoped_ptr<JSBooleanResultGetter> js_result_getter( |
sky
2015/08/31 15:57:27
Create on stack.
Mikhail
2015/09/01 08:13:46
Done.
|
+ new JSBooleanResultGetter); |
+ // Execute the JS to run the tests, and wait until it has finished. |
+ base::RunLoop run_loop; |
+ web_contents->GetMainFrame()->ExecuteJavaScriptForTests( |
+ js_funtcion, |
+ base::Bind(&JSBooleanResultGetter::OnJsExecutionDone, |
+ base::Unretained(js_result_getter.get()), run_loop.QuitClosure())); |
+ run_loop.Run(); |
+ EXPECT_TRUE(js_result_getter->GetResult()); |
+} |
+} // namespace |
+ |
+IN_PROC_BROWSER_TEST_F(BrowserTest, ChangeDisplayMode) { |
+ CheckDisplayModeMQ( |
+ ASCIIToUTF16("browser"), |
+ browser()->tab_strip_model()->GetActiveWebContents()); |
+ |
+ Profile* profile = ProfileManager::GetActiveUserProfile(); |
+ ui_test_utils::BrowserAddedObserver browser_added_observer; |
+ Browser* app_browser = CreateBrowserForApp("blah", profile); |
+ browser_added_observer.WaitForSingleNewBrowser(); |
+ auto app_contents = app_browser->tab_strip_model()->GetActiveWebContents(); |
+ CheckDisplayModeMQ(ASCIIToUTF16("standalone"), app_contents); |
+ |
+ app_browser->window()->EnterFullscreen( |
+ GURL(), EXCLUSIVE_ACCESS_BUBBLE_TYPE_BROWSER_FULLSCREEN_EXIT_INSTRUCTION, |
+ false); |
+ |
+ // Sync navigation just to make sure IPC has passed (updated |
+ // display mode is delivered to RP). |
+ content::TestNavigationObserver observer(app_contents, 1); |
+ ui_test_utils::NavigateToURL(app_browser, GURL(url::kAboutBlankURL)); |
+ observer.Wait(); |
+ |
+ CheckDisplayModeMQ(ASCIIToUTF16("fullscreen"), app_contents); |
+} |
+ |