Chromium Code Reviews| OLD | NEW |
|---|---|
| 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 <string> | 5 #include <string> |
| 6 | 6 |
| 7 #include "base/bind.h" | 7 #include "base/bind.h" |
| 8 #include "base/file_path.h" | 8 #include "base/file_path.h" |
| 9 #include "base/file_util.h" | 9 #include "base/file_util.h" |
| 10 #include "base/scoped_temp_dir.h" | 10 #include "base/scoped_temp_dir.h" |
| 11 #include "base/string16.h" | 11 #include "base/string16.h" |
| 12 #include "base/test/test_file_util.h" | |
| 12 #include "base/utf_string_conversions.h" | 13 #include "base/utf_string_conversions.h" |
| 13 #include "base/test/test_file_util.h" | |
| 14 #include "chrome/app/chrome_command_ids.h" | 14 #include "chrome/app/chrome_command_ids.h" |
| 15 #include "chrome/browser/autocomplete/autocomplete_controller.h" | 15 #include "chrome/browser/autocomplete/autocomplete_controller.h" |
| 16 #include "chrome/browser/browser_process.h" | 16 #include "chrome/browser/browser_process.h" |
| 17 #include "chrome/browser/history/history.h" | 17 #include "chrome/browser/history/history.h" |
| 18 #include "chrome/browser/history/history_service_factory.h" | 18 #include "chrome/browser/history/history_service_factory.h" |
| 19 #include "chrome/browser/infobars/infobar_tab_helper.h" | 19 #include "chrome/browser/infobars/infobar_tab_helper.h" |
| 20 #include "chrome/browser/net/url_request_mock_util.h" | 20 #include "chrome/browser/net/url_request_mock_util.h" |
| 21 #include "chrome/browser/policy/browser_policy_connector.h" | 21 #include "chrome/browser/policy/browser_policy_connector.h" |
| 22 #include "chrome/browser/policy/mock_configuration_policy_provider.h" | 22 #include "chrome/browser/policy/mock_configuration_policy_provider.h" |
| 23 #include "chrome/browser/policy/policy_map.h" | 23 #include "chrome/browser/policy/policy_map.h" |
| (...skipping 16 matching lines...) Expand all Loading... | |
| 40 #include "chrome/browser/ui/tab_contents/tab_contents.h" | 40 #include "chrome/browser/ui/tab_contents/tab_contents.h" |
| 41 #include "chrome/common/chrome_notification_types.h" | 41 #include "chrome/common/chrome_notification_types.h" |
| 42 #include "chrome/common/pref_names.h" | 42 #include "chrome/common/pref_names.h" |
| 43 #include "chrome/test/base/in_process_browser_test.h" | 43 #include "chrome/test/base/in_process_browser_test.h" |
| 44 #include "chrome/test/base/ui_test_utils.h" | 44 #include "chrome/test/base/ui_test_utils.h" |
| 45 #include "content/public/browser/browser_context.h" | 45 #include "content/public/browser/browser_context.h" |
| 46 #include "content/public/browser/browser_thread.h" | 46 #include "content/public/browser/browser_thread.h" |
| 47 #include "content/public/browser/download_item.h" | 47 #include "content/public/browser/download_item.h" |
| 48 #include "content/public/browser/download_manager.h" | 48 #include "content/public/browser/download_manager.h" |
| 49 #include "content/public/browser/notification_service.h" | 49 #include "content/public/browser/notification_service.h" |
| 50 #include "content/public/browser/notification_source.h" | |
| 50 #include "content/public/browser/notification_types.h" | 51 #include "content/public/browser/notification_types.h" |
| 51 #include "content/public/browser/web_contents.h" | 52 #include "content/public/browser/web_contents.h" |
| 52 #include "content/public/test/browser_test_utils.h" | 53 #include "content/public/test/browser_test_utils.h" |
| 53 #include "content/public/test/download_test_observer.h" | 54 #include "content/public/test/download_test_observer.h" |
| 54 #include "content/public/test/test_utils.h" | 55 #include "content/public/test/test_utils.h" |
| 55 #include "content/test/net/url_request_mock_http_job.h" | 56 #include "content/test/net/url_request_mock_http_job.h" |
| 56 #include "googleurl/src/gurl.h" | 57 #include "googleurl/src/gurl.h" |
| 57 #include "net/base/net_util.h" | 58 #include "net/base/net_util.h" |
| 58 #include "net/url_request/url_request.h" | 59 #include "net/url_request/url_request.h" |
| 59 #include "net/url_request/url_request_filter.h" | 60 #include "net/url_request/url_request_filter.h" |
| 60 #include "policy/policy_constants.h" | 61 #include "policy/policy_constants.h" |
| 61 #include "testing/gmock/include/gmock/gmock.h" | 62 #include "testing/gmock/include/gmock/gmock.h" |
| 62 #include "testing/gtest/include/gtest/gtest.h" | 63 #include "testing/gtest/include/gtest/gtest.h" |
| 63 | 64 |
| 65 #if defined(OS_CHROMEOS) | |
| 66 #include "ash/accelerators/accelerator_controller.h" | |
| 67 #include "ash/accelerators/accelerator_table.h" | |
| 68 #include "ash/shell.h" | |
| 69 #include "ash/shell_delegate.h" | |
| 70 #include "chrome/browser/download/download_prefs.h" | |
| 71 #endif | |
| 72 | |
| 64 using content::BrowserThread; | 73 using content::BrowserThread; |
| 65 using testing::Return; | 74 using testing::Return; |
| 66 | 75 |
| 67 namespace policy { | 76 namespace policy { |
| 68 | 77 |
| 69 namespace { | 78 namespace { |
| 70 | 79 |
| 71 const char kURL[] = "http://example.com"; | 80 const char kURL[] = "http://example.com"; |
| 72 const char kCookieValue[] = "converted=true"; | 81 const char kCookieValue[] = "converted=true"; |
| 73 // Assigned to Philip J. Fry to fix eventually. | 82 // Assigned to Philip J. Fry to fix eventually. |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 150 observer.WaitForFinished(); | 159 observer.WaitForFinished(); |
| 151 EXPECT_EQ( | 160 EXPECT_EQ( |
| 152 1u, observer.NumDownloadsSeenInState(content::DownloadItem::COMPLETE)); | 161 1u, observer.NumDownloadsSeenInState(content::DownloadItem::COMPLETE)); |
| 153 EXPECT_TRUE(file_util::PathExists(downloaded)); | 162 EXPECT_TRUE(file_util::PathExists(downloaded)); |
| 154 file_util::FileEnumerator enumerator( | 163 file_util::FileEnumerator enumerator( |
| 155 dir, false, file_util::FileEnumerator::FILES); | 164 dir, false, file_util::FileEnumerator::FILES); |
| 156 EXPECT_EQ(file, enumerator.Next().BaseName()); | 165 EXPECT_EQ(file, enumerator.Next().BaseName()); |
| 157 EXPECT_EQ(FilePath(), enumerator.Next()); | 166 EXPECT_EQ(FilePath(), enumerator.Next()); |
| 158 } | 167 } |
| 159 | 168 |
| 169 class LoadObserver : public content::NotificationObserver { | |
|
bartfab (slow)
2012/08/31 15:50:13
#include "content/public/browser/notification_obse
Joao da Silva
2012/09/03 09:01:04
This is essentially a WindowedNotificationObserver
qfel
2012/09/03 11:31:21
Seems I just missed its existence.
| |
| 170 public: | |
| 171 LoadObserver() | |
| 172 : source_(content::NotificationService::AllSources()), | |
| 173 message_loop_runner_(new content::MessageLoopRunner) { | |
| 174 } | |
| 175 | |
| 176 content::Source<content::NavigationController> Wait() { | |
| 177 registrar_.Add(this, content::NOTIFICATION_LOAD_STOP, | |
| 178 content::NotificationService::AllSources()); | |
| 179 message_loop_runner_->Run(); | |
| 180 return source_; | |
| 181 } | |
| 182 | |
| 183 void Observe(int type, | |
| 184 const content::NotificationSource& source, | |
| 185 const content::NotificationDetails& details) { | |
| 186 CHECK_EQ(type, content::NOTIFICATION_LOAD_STOP); | |
|
bartfab (slow)
2012/08/31 15:50:13
Why CHECK_EQ, not ASSERT_EQ?
qfel
2012/09/03 11:31:21
I wonder myself.. Seems I just happened to see sim
| |
| 187 source_ = static_cast<content::Source<content::NavigationController> >( | |
| 188 source); | |
| 189 message_loop_runner_->Quit(); | |
| 190 } | |
| 191 | |
| 192 private: | |
| 193 content::NotificationRegistrar registrar_; | |
| 194 content::Source<content::NavigationController> source_; | |
| 195 scoped_refptr<content::MessageLoopRunner> message_loop_runner_; | |
| 196 }; | |
| 197 | |
| 198 #if defined(OS_CHROMEOS) | |
| 199 int CountScreenshots() { | |
| 200 DownloadPrefs* download_prefs = DownloadPrefs::FromBrowserContext( | |
|
bartfab (slow)
2012/08/31 15:50:13
#include "chrome/browser/download/download_prefs.h
qfel
2012/09/03 11:31:21
It's in the OS_CHROMEOS guarded include section. M
| |
| 201 ash::Shell::GetInstance()->delegate()->GetCurrentBrowserContext()); | |
| 202 file_util::FileEnumerator enumerator(download_prefs->DownloadPath(), | |
| 203 false, file_util::FileEnumerator::FILES, | |
| 204 "Screenshot*"); | |
| 205 int count = 0; | |
| 206 while (!enumerator.Next().empty()) | |
| 207 count++; | |
| 208 return count; | |
| 209 } | |
| 210 | |
| 211 void NoOp() { | |
| 212 // As the name suggests, do absolutely nothing and chill out. Used as a | |
| 213 // callback to wait for message loop to process previous messages. | |
|
bartfab (slow)
2012/08/31 15:50:13
This is what base::DoNothing is for.
qfel
2012/09/03 11:31:21
Done.
| |
| 214 } | |
| 215 #endif | |
| 216 | |
| 160 } // namespace | 217 } // namespace |
| 161 | 218 |
| 162 class PolicyTest : public InProcessBrowserTest { | 219 class PolicyTest : public InProcessBrowserTest { |
| 163 protected: | 220 protected: |
| 164 PolicyTest() {} | 221 PolicyTest() {} |
| 165 | 222 |
| 166 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { | 223 virtual void SetUpInProcessBrowserTestFixture() OVERRIDE { |
| 167 EXPECT_CALL(provider_, IsInitializationComplete()) | 224 EXPECT_CALL(provider_, IsInitializationComplete()) |
| 168 .WillRepeatedly(Return(true)); | 225 .WillRepeatedly(Return(true)); |
| 169 BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); | 226 BrowserPolicyConnector::SetPolicyProviderForTesting(&provider_); |
| 170 } | 227 } |
| 171 | 228 |
| 172 virtual void SetUpOnMainThread() OVERRIDE { | 229 virtual void SetUpOnMainThread() OVERRIDE { |
| 173 BrowserThread::PostTask( | 230 BrowserThread::PostTask( |
| 174 BrowserThread::IO, FROM_HERE, | 231 BrowserThread::IO, FROM_HERE, |
| 175 base::Bind(chrome_browser_net::SetUrlRequestMocksEnabled, true)); | 232 base::Bind(chrome_browser_net::SetUrlRequestMocksEnabled, true)); |
| 176 } | 233 } |
| 177 | 234 |
| 235 void SetScreenshotPolicy(bool enabled) { | |
| 236 PolicyMap policies; | |
| 237 policies.Set(key::kDisableScreenshots, POLICY_LEVEL_MANDATORY, | |
| 238 POLICY_SCOPE_USER, base::Value::CreateBooleanValue(!enabled)); | |
|
bartfab (slow)
2012/08/31 15:50:13
#include "base/values.h" is missing for this.
qfel
2012/09/03 11:31:21
Done.
| |
| 239 provider_.UpdateChromePolicy(policies); | |
| 240 } | |
| 241 | |
| 242 void TestScreenshotFeedback(bool enabled) { | |
| 243 SetScreenshotPolicy(enabled); | |
| 244 | |
| 245 // Wait for feedback page to load. | |
| 246 LoadObserver observer; | |
| 247 EXPECT_TRUE(chrome::ExecuteCommand(browser(), IDC_FEEDBACK)); | |
| 248 content::WebContents* web_contents = observer.Wait()->GetWebContents(); | |
| 249 | |
| 250 // Wait for feedback page to fully initialize. | |
| 251 bool result = false; | |
| 252 EXPECT_TRUE(content::ExecuteJavaScriptAndExtractBool( | |
| 253 web_contents->GetRenderViewHost(), | |
| 254 std::wstring(), | |
|
bartfab (slow)
2012/08/31 15:50:13
L"" would work just as well.
qfel
2012/09/03 11:31:21
The code where I found ExecuteJavaScriptAndExtract
| |
| 255 L"function btest_initCompleted(url) {" | |
|
bartfab (slow)
2012/08/31 15:50:13
Indentation throughout this JS code should be two
qfel
2012/09/03 11:31:21
Done.
| |
| 256 L" var img = new Image();" | |
| 257 L" img.src = url;" | |
| 258 L" img.onload = function() {" | |
| 259 L" domAutomationController.send(img.width * img.height > 0);" | |
| 260 L" };" | |
| 261 L" img.onerror = function() {" | |
| 262 L" domAutomationController.send(false);" | |
| 263 L" };" | |
| 264 L"}" | |
| 265 L"function setupCurrentScreenshot(url) {" | |
| 266 L" btest_initCompleted(url);" | |
| 267 L"}" | |
| 268 L"var img = document.getElementById(" | |
| 269 L" 'current-screenshots-thumbnailDiv-0-image');" | |
| 270 L"if (img)" | |
| 271 L" btest_initCompleted(img.src);", | |
|
Joao da Silva
2012/09/03 09:01:04
else
domAutomationController.send(false);
qfel
2012/09/03 11:31:21
No. If !img, then setupCurrentScreenshot is yet to
Joao da Silva
2012/09/03 11:37:55
Right. The comment makes that clear now :-)
| |
| 272 &result)); | |
| 273 EXPECT_TRUE(result == enabled); | |
|
Joao da Silva
2012/09/03 09:01:04
EXPECT_EQ
qfel
2012/09/03 11:31:21
Done.
| |
| 274 | |
| 275 // Feedback page is a singleton page, so close so future calls to this | |
| 276 // function work as expected. | |
| 277 web_contents->Close(); | |
| 278 } | |
| 279 | |
| 280 #if defined(OS_CHROMEOS) | |
| 281 void TestScreenshotFile(bool enabled) { | |
| 282 SetScreenshotPolicy(enabled); | |
| 283 ash::Shell::GetInstance()->accelerator_controller()->PerformAction( | |
| 284 ash::TAKE_SCREENSHOT, ui::Accelerator()); | |
|
Joao da Silva
2012/09/03 09:01:04
indent
qfel
2012/09/03 11:31:21
Done.
| |
| 285 | |
| 286 // TAKE_SCREENSHOT handler posts write file task on success, wait for it. | |
| 287 BrowserThread::PostTaskAndReply( | |
| 288 BrowserThread::IO, | |
| 289 FROM_HERE, | |
| 290 base::Bind(NoOp), | |
| 291 MessageLoop::QuitClosure()); | |
| 292 content::RunMessageLoop(); | |
| 293 } | |
| 294 #endif | |
| 295 | |
| 178 MockConfigurationPolicyProvider provider_; | 296 MockConfigurationPolicyProvider provider_; |
| 179 }; | 297 }; |
| 180 | 298 |
| 181 IN_PROC_BROWSER_TEST_F(PolicyTest, BookmarkBarEnabled) { | 299 IN_PROC_BROWSER_TEST_F(PolicyTest, BookmarkBarEnabled) { |
| 182 // Verifies that the bookmarks bar can be forced to always or never show up. | 300 // Verifies that the bookmarks bar can be forced to always or never show up. |
| 183 | 301 |
| 184 // Test starts in about:blank. | 302 // Test starts in about:blank. |
| 185 PrefService* prefs = browser()->profile()->GetPrefs(); | 303 PrefService* prefs = browser()->profile()->GetPrefs(); |
| 186 EXPECT_FALSE(prefs->IsManagedPreference(prefs::kShowBookmarkBar)); | 304 EXPECT_FALSE(prefs->IsManagedPreference(prefs::kShowBookmarkBar)); |
| 187 EXPECT_FALSE(prefs->GetBoolean(prefs::kShowBookmarkBar)); | 305 EXPECT_FALSE(prefs->GetBoolean(prefs::kShowBookmarkBar)); |
| (...skipping 290 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 478 whitelist.Append(base::Value::CreateStringValue("bbb.com/policy")); | 596 whitelist.Append(base::Value::CreateStringValue("bbb.com/policy")); |
| 479 policies.Set(key::kURLWhitelist, POLICY_LEVEL_MANDATORY, | 597 policies.Set(key::kURLWhitelist, POLICY_LEVEL_MANDATORY, |
| 480 POLICY_SCOPE_USER, whitelist.DeepCopy()); | 598 POLICY_SCOPE_USER, whitelist.DeepCopy()); |
| 481 provider_.UpdateChromePolicy(policies); | 599 provider_.UpdateChromePolicy(policies); |
| 482 CheckCanOpenURL(browser(), kAAA); | 600 CheckCanOpenURL(browser(), kAAA); |
| 483 CheckURLIsBlocked(browser(), kBBB); | 601 CheckURLIsBlocked(browser(), kBBB); |
| 484 CheckCanOpenURL(browser(), kSUB_BBB); | 602 CheckCanOpenURL(browser(), kSUB_BBB); |
| 485 CheckCanOpenURL(browser(), kBBB_PATH); | 603 CheckCanOpenURL(browser(), kBBB_PATH); |
| 486 } | 604 } |
| 487 | 605 |
| 606 IN_PROC_BROWSER_TEST_F(PolicyTest, DisableScreenshotsFeedback) { | |
| 607 // Make sure current screenshot can be taken and displayed on feedback page. | |
| 608 TestScreenshotFeedback(true); | |
| 609 | |
| 610 // Check if banning screenshots disabled feedback page's ability to grab a | |
| 611 // screenshot. | |
| 612 TestScreenshotFeedback(false); | |
| 613 } | |
| 614 | |
| 615 #if defined(OS_CHROMEOS) | |
| 616 IN_PROC_BROWSER_TEST_F(PolicyTest, DisableScreenshotsFile) { | |
| 617 int screenshot_count = CountScreenshots(); | |
| 618 | |
| 619 // Make sure screenshots are counted correctly. | |
| 620 TestScreenshotFile(true); | |
| 621 ASSERT_EQ(CountScreenshots(), screenshot_count + 1); | |
| 622 | |
| 623 // Check if trying to take a screenshot fails when disabled by policy. | |
| 624 TestScreenshotFile(false); | |
| 625 ASSERT_EQ(CountScreenshots(), screenshot_count + 1); | |
| 626 } | |
| 627 #endif | |
| 628 | |
| 488 } // namespace policy | 629 } // namespace policy |
| OLD | NEW |