1f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved.
22a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
32a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// found in the LICENSE file.
42a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
5f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_resource_throttle.h"
62a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
78bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "base/command_line.h"
82a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "base/prefs/pref_service.h"
9c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/values.h"
102a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/profiles/profile.h"
11f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_constants.h"
12f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_service.h"
13f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_service_factory.h"
14f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_settings_service.h"
15f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)#include "chrome/browser/supervised_user/supervised_user_settings_service_factory.h"
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/browser/ui/browser.h"
178bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)#include "chrome/common/chrome_switches.h"
182a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/in_process_browser_test.h"
192a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "chrome/test/base/ui_test_utils.h"
202a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/navigation_entry.h"
212a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/browser/web_contents.h"
222a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/common/page_type.h"
232a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_navigation_observer.h"
242a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)#include "content/public/test/test_utils.h"
252a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
262a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::MessageLoopRunner;
272a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::NavigationController;
282a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)using content::WebContents;
292a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
30f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)class SupervisedUserResourceThrottleTest : public InProcessBrowserTest {
312a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) protected:
32f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SupervisedUserResourceThrottleTest() : supervised_user_service_(NULL) {}
33f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  virtual ~SupervisedUserResourceThrottleTest() {}
342a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
352a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles) private:
362a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  virtual void SetUpOnMainThread() OVERRIDE;
378bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)  virtual void SetUpCommandLine(CommandLine* command_line) OVERRIDE;
382a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
39f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SupervisedUserService* supervised_user_service_;
402a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
412a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
42f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void SupervisedUserResourceThrottleTest::SetUpOnMainThread() {
43f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  supervised_user_service_ =
44f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      SupervisedUserServiceFactory::GetForProfile(browser()->profile());
458bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)}
468bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)
47f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)void SupervisedUserResourceThrottleTest::SetUpCommandLine(
488bcbed890bc3ce4d7a057a8f32cab53fa534672eTorne (Richard Coles)    CommandLine* command_line) {
49f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  command_line->AppendSwitchASCII(switches::kSupervisedUserId, "asdf");
502a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
512a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
522a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)// Tests that showing the blocking interstitial for a WebContents without a
53f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)// SupervisedUserNavigationObserver doesn't crash.
54f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)IN_PROC_BROWSER_TEST_F(SupervisedUserResourceThrottleTest,
55c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)                       NoNavigationObserverBlock) {
56c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  Profile* profile = browser()->profile();
57f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  SupervisedUserSettingsService* supervised_user_settings_service =
58f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      SupervisedUserSettingsServiceFactory::GetForProfile(profile);
59f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)  supervised_user_settings_service->SetLocalSettingForTesting(
60f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)      supervised_users::kContentPackDefaultFilteringBehavior,
61c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      scoped_ptr<base::Value>(
62f8ee788a64d60abd8f2d742a5fdedde054ecd910Torne (Richard Coles)          new base::FundamentalValue(SupervisedUserURLFilter::BLOCK)));
63c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
642a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  scoped_ptr<WebContents> web_contents(
65c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      WebContents::Create(WebContents::CreateParams(profile)));
662a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  NavigationController& controller = web_contents->GetController();
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  content::TestNavigationObserver observer(web_contents.get());
682a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  controller.LoadURL(GURL("http://www.example.com"), content::Referrer(),
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                     ui::PAGE_TRANSITION_TYPED, std::string());
702a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  observer.Wait();
712a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  content::NavigationEntry* entry = controller.GetActiveEntry();
722a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  ASSERT_TRUE(entry);
732a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)  EXPECT_EQ(content::PAGE_TYPE_INTERSTITIAL, entry->GetPageType());
742a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)}
75