Index: chrome/browser/policy/policy_browsertest.cc |
diff --git a/chrome/browser/policy/policy_browsertest.cc b/chrome/browser/policy/policy_browsertest.cc |
index ff9bdf7ccc147d8c4b9e143bb20ab930a92fe5b5..8e6ab55c640280babbbf82d5270894c10a487092 100644 |
--- a/chrome/browser/policy/policy_browsertest.cc |
+++ b/chrome/browser/policy/policy_browsertest.cc |
@@ -1317,6 +1317,86 @@ IN_PROC_BROWSER_TEST_F(PolicyTest, DeveloperToolsDisabled) { |
EXPECT_FALSE(DevToolsWindow::GetInstanceForInspectedWebContents(contents)); |
} |
+namespace { |
+ |
+void WaitForExtensionsDevModeControlsVisibility(content::WebContents* contents, |
+ bool expected_visible) { |
+ // Visibility of dev-controls is controlled through its height - wait for that |
+ bool done = false; |
+ ASSERT_TRUE(content::ExecuteScriptAndExtractBool( |
+ contents, |
+ base::StringPrintf( |
+ "var screenElement = document.getElementById('dev-controls');" |
+ "function SendReplyIfAsExpected() {" |
+ " var is_visible = screenElement.offsetHeight > 0;" |
+ " if (is_visible != %s)" |
+ " return false;" |
+ " domAutomationController.send(true);" |
+ " observer.disconnect();" |
+ " return true;" |
+ "}" |
+ "var observer = new MutationObserver(SendReplyIfAsExpected);" |
+ "if (!SendReplyIfAsExpected()) {" |
+ " var options = { 'attributes': true };" |
+ " observer.observe(screenElement, options);" |
+ "}", |
+ (expected_visible ? "true" : "false")), |
+ &done)); |
+} |
+ |
+} // namespace |
+ |
+IN_PROC_BROWSER_TEST_F(PolicyTest, DeveloperToolsDisabledExtensionsDevMode) { |
+ // Verifies that when DeveloperToolsDisabled policy is set, the "dev mode" |
+ // in chrome://extensions-frame is also not accessible. |
+ // Also verifies that the developer mode related buttons are actively hidden |
+ // when the policy comes in. |
+ // Note: We don't test the indicator as it is tested in the policy pref test |
+ // for kDeveloperToolsDisabled. |
+ |
+ const char js_toggle_dev_mode_checkbox[] = |
+ "document.getElementById('toggle-dev-on')"; |
+ |
+ // Navigate to the extensions frame and enabled "Developer mode" |
+ ui_test_utils::NavigateToURL(browser(), |
+ GURL(chrome::kChromeUIExtensionsFrameURL)); |
+ |
+ content::WebContents* contents = |
+ browser()->tab_strip_model()->GetActiveWebContents(); |
+ EXPECT_TRUE(content::ExecuteScript( |
+ contents, base::StringPrintf("domAutomationController.send(%s.click());", |
+ js_toggle_dev_mode_checkbox))); |
+ |
+ WaitForExtensionsDevModeControlsVisibility(contents, true); |
+ |
+ // Disable devtools via policy. |
+ PolicyMap policies; |
+ policies.Set(key::kDeveloperToolsDisabled, POLICY_LEVEL_MANDATORY, |
+ POLICY_SCOPE_USER, POLICY_SOURCE_CLOUD, |
+ base::MakeUnique<base::FundamentalValue>(true), nullptr); |
+ UpdateProviderPolicy(policies); |
+ |
+ // Expect devcontrols to be hidden now... |
+ WaitForExtensionsDevModeControlsVisibility(contents, false); |
+ |
+ // ... and checkbox state |
+ bool is_toggle_dev_mode_checkbox_checked = false; |
+ EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
+ contents, base::StringPrintf("domAutomationController.send(%s.checked);", |
+ js_toggle_dev_mode_checkbox), |
+ &is_toggle_dev_mode_checkbox_checked)); |
+ EXPECT_FALSE(is_toggle_dev_mode_checkbox_checked); |
+ |
+ bool is_toggle_dev_mode_checkbox_enabled = false; |
+ EXPECT_TRUE(content::ExecuteScriptAndExtractBool( |
+ contents, |
+ base::StringPrintf( |
+ "domAutomationController.send(!%s.hasAttribute('disabled'))", |
+ js_toggle_dev_mode_checkbox), |
+ &is_toggle_dev_mode_checkbox_enabled)); |
+ EXPECT_FALSE(is_toggle_dev_mode_checkbox_enabled); |
+} |
+ |
// TODO(samarth): remove along with rest of NTP4 code. |
IN_PROC_BROWSER_TEST_F(PolicyTest, DISABLED_WebStoreIconHidden) { |
// Verifies that the web store icons can be hidden from the new tab page. |