// Copyright (c) 2013 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. #include "chrome/browser/managed_mode/managed_mode_resource_throttle.h" #include "base/command_line.h" #include "base/prefs/pref_service.h" #include "base/values.h" #include "chrome/browser/managed_mode/managed_user_constants.h" #include "chrome/browser/managed_mode/managed_user_service.h" #include "chrome/browser/managed_mode/managed_user_service_factory.h" #include "chrome/browser/managed_mode/managed_user_settings_service.h" #include "chrome/browser/managed_mode/managed_user_settings_service_factory.h" #include "chrome/browser/profiles/profile.h" #include "chrome/browser/ui/browser.h" #include "chrome/common/chrome_switches.h" #include "chrome/test/base/in_process_browser_test.h" #include "chrome/test/base/ui_test_utils.h" #include "content/public/browser/navigation_entry.h" #include "content/public/browser/web_contents.h" #include "content/public/common/page_type.h" #include "content/public/test/test_navigation_observer.h" #include "content/public/test/test_utils.h" #include "content/public/test/test_utils.h" using content::MessageLoopRunner; using content::NavigationController; using content::WebContents; class ManagedModeResourceThrottleTest : public InProcessBrowserTest { protected: ManagedModeResourceThrottleTest() : managed_user_service_(NULL) {} virtual ~ManagedModeResourceThrottleTest() {} private: virtual void SetUpOnMainThread() OVERRIDE; virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE; ManagedUserService* managed_user_service_; }; void ManagedModeResourceThrottleTest::SetUpOnMainThread() { managed_user_service_ = ManagedUserServiceFactory::GetForProfile(browser()->profile()); } void ManagedModeResourceThrottleTest::SetUpCommandLine( CommandLine* command_line) { command_line->AppendSwitchASCII(switches::kManagedUserId, "asdf"); } // Tests that showing the blocking interstitial for a WebContents without a // ManagedModeNavigationObserver doesn't crash. IN_PROC_BROWSER_TEST_F(ManagedModeResourceThrottleTest, NoNavigationObserverBlock) { Profile* profile = browser()->profile(); ManagedUserSettingsService* managed_user_settings_service = ManagedUserSettingsServiceFactory::GetForProfile(profile); managed_user_settings_service->SetLocalSettingForTesting( managed_users::kContentPackDefaultFilteringBehavior, scoped_ptr( new base::FundamentalValue(ManagedModeURLFilter::BLOCK))); scoped_ptr web_contents( WebContents::Create(WebContents::CreateParams(profile))); NavigationController& controller = web_contents->GetController(); content::TestNavigationObserver observer(web_contents.get()); controller.LoadURL(GURL("http://www.example.com"), content::Referrer(), content::PAGE_TRANSITION_TYPED, std::string()); observer.Wait(); content::NavigationEntry* entry = controller.GetActiveEntry(); ASSERT_TRUE(entry); EXPECT_EQ(content::PAGE_TYPE_INTERSTITIAL, entry->GetPageType()); }