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..dccf191e289864a49fa7dd18b6008d3eb240dfb4 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: |
+ JSBooleanResultGetter() = default; |
+ 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_; |
+ DISALLOW_COPY_AND_ASSIGN(JSBooleanResultGetter); |
+}; |
+ |
+void CheckDisplayModeMQ( |
+ const base::string16& display_mode, |
+ content::WebContents* web_contents) { |
+ base::string16 funtcion = |
+ ASCIIToUTF16("(function() {return window.matchMedia('(display-mode: ") + |
+ display_mode + ASCIIToUTF16(")').matches;})();"); |
+ JSBooleanResultGetter js_result_getter; |
+ // Execute the JS to run the tests, and wait until it has finished. |
+ base::RunLoop run_loop; |
+ web_contents->GetMainFrame()->ExecuteJavaScriptForTests( |
+ funtcion, |
+ base::Bind(&JSBooleanResultGetter::OnJsExecutionDone, |
+ base::Unretained(&js_result_getter), 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); |
+} |
+ |