1// Copyright (c) 2010 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/content_setting_image_model.h"
6#include "chrome/browser/content_settings/host_content_settings_map.h"
7#include "chrome/browser/prerender/prerender_manager.h"
8#include "chrome/browser/profiles/profile.h"
9#include "chrome/test/testing_profile.h"
10#include "content/browser/browser_thread.h"
11#include "content/browser/renderer_host/test_render_view_host.h"
12#include "content/browser/tab_contents/test_tab_contents.h"
13#include "net/base/cookie_options.h"
14#include "testing/gtest/include/gtest/gtest.h"
15
16class ContentSettingImageModelTest : public RenderViewHostTestHarness {
17 public:
18  ContentSettingImageModelTest()
19      : RenderViewHostTestHarness(),
20        ui_thread_(BrowserThread::UI, &message_loop_) {}
21
22 private:
23  BrowserThread ui_thread_;
24
25  DISALLOW_COPY_AND_ASSIGN(ContentSettingImageModelTest);
26};
27
28TEST_F(ContentSettingImageModelTest, UpdateFromTabContents) {
29  TestTabContents tab_contents(profile_.get(), NULL);
30  TabSpecificContentSettings* content_settings =
31      tab_contents.GetTabSpecificContentSettings();
32  scoped_ptr<ContentSettingImageModel> content_setting_image_model(
33     ContentSettingImageModel::CreateContentSettingImageModel(
34         CONTENT_SETTINGS_TYPE_IMAGES));
35  EXPECT_FALSE(content_setting_image_model->is_visible());
36  EXPECT_EQ(0, content_setting_image_model->get_icon());
37  EXPECT_TRUE(content_setting_image_model->get_tooltip().empty());
38
39  content_settings->OnContentBlocked(CONTENT_SETTINGS_TYPE_IMAGES,
40                                     std::string());
41  content_setting_image_model->UpdateFromTabContents(&tab_contents);
42
43  EXPECT_TRUE(content_setting_image_model->is_visible());
44  EXPECT_NE(0, content_setting_image_model->get_icon());
45  EXPECT_FALSE(content_setting_image_model->get_tooltip().empty());
46}
47
48TEST_F(ContentSettingImageModelTest, CookieAccessed) {
49  TestTabContents tab_contents(profile_.get(), NULL);
50  TabSpecificContentSettings* content_settings =
51      tab_contents.GetTabSpecificContentSettings();
52  profile_->GetHostContentSettingsMap()->SetDefaultContentSetting(
53      CONTENT_SETTINGS_TYPE_COOKIES, CONTENT_SETTING_BLOCK);
54  scoped_ptr<ContentSettingImageModel> content_setting_image_model(
55     ContentSettingImageModel::CreateContentSettingImageModel(
56         CONTENT_SETTINGS_TYPE_COOKIES));
57  EXPECT_FALSE(content_setting_image_model->is_visible());
58  EXPECT_EQ(0, content_setting_image_model->get_icon());
59  EXPECT_TRUE(content_setting_image_model->get_tooltip().empty());
60
61  net::CookieOptions options;
62  content_settings->OnCookieChanged(
63      GURL("http://google.com"), "A=B", options, false);
64  content_setting_image_model->UpdateFromTabContents(&tab_contents);
65  EXPECT_TRUE(content_setting_image_model->is_visible());
66  EXPECT_NE(0, content_setting_image_model->get_icon());
67  EXPECT_FALSE(content_setting_image_model->get_tooltip().empty());
68}
69
70TEST_F(ContentSettingImageModelTest, Prerender) {
71  prerender::PrerenderManager::SetMode(
72      prerender::PrerenderManager::PRERENDER_MODE_ENABLED);
73  TestTabContents tab_contents(profile_.get(), NULL);
74  scoped_ptr<ContentSettingImageModel> content_setting_image_model(
75     ContentSettingImageModel::CreateContentSettingImageModel(
76         CONTENT_SETTINGS_TYPE_PRERENDER));
77  EXPECT_FALSE(content_setting_image_model->is_visible());
78  EXPECT_NE(0, content_setting_image_model->get_icon());
79  EXPECT_FALSE(content_setting_image_model->get_tooltip().empty());
80
81  // Make the tab_contents prerendered
82  tab_contents.profile()->GetPrerenderManager()->MarkTabContentsAsPrerendered(
83      &tab_contents);
84  content_setting_image_model->UpdateFromTabContents(&tab_contents);
85  EXPECT_TRUE(content_setting_image_model->is_visible());
86  EXPECT_NE(0, content_setting_image_model->get_icon());
87  EXPECT_FALSE(content_setting_image_model->get_tooltip().empty());
88}
89