Update To 11.40.268.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / content_settings / permission_context_base_unittest.cc
1 // Copyright 2014 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_settings/permission_context_base.h"
6
7 #include "base/bind.h"
8 #include "chrome/browser/content_settings/permission_queue_controller.h"
9 #include "chrome/browser/infobars/infobar_service.h"
10 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
11 #include "chrome/test/base/testing_profile.h"
12 #include "components/content_settings/core/browser/host_content_settings_map.h"
13 #include "components/content_settings/core/common/content_settings.h"
14 #include "components/content_settings/core/common/content_settings_types.h"
15 #include "components/content_settings/core/common/permission_request_id.h"
16 #include "content/public/browser/web_contents.h"
17 #include "content/public/test/mock_render_process_host.h"
18 #include "content/public/test/web_contents_tester.h"
19 #include "testing/gtest/include/gtest/gtest.h"
20
21 class PermissionContextBaseTests : public ChromeRenderViewHostTestHarness {
22  protected:
23   PermissionContextBaseTests() {}
24   ~PermissionContextBaseTests() override {}
25
26  private:
27   // ChromeRenderViewHostTestHarness:
28   void SetUp() override {
29     ChromeRenderViewHostTestHarness::SetUp();
30     InfoBarService::CreateForWebContents(web_contents());
31   }
32
33   DISALLOW_COPY_AND_ASSIGN(PermissionContextBaseTests);
34 };
35
36 class TestPermissionContext : public PermissionContextBase {
37  public:
38   TestPermissionContext(Profile* profile,
39                   const ContentSettingsType permission_type)
40    : PermissionContextBase(profile, permission_type),
41      permission_set_(false),
42      permission_granted_(false),
43      tab_context_updated_(false) {}
44
45   ~TestPermissionContext() override {}
46
47   PermissionQueueController* GetInfoBarController() {
48     return GetQueueController();
49   }
50
51   bool permission_granted() {
52     return permission_granted_;
53   }
54
55   bool permission_set() {
56     return permission_set_;
57   }
58
59   bool tab_context_updated() {
60     return tab_context_updated_;
61   }
62
63   void TrackPermissionDecision(bool granted) {
64     permission_set_ = true;
65     permission_granted_ = granted;
66   }
67
68  protected:
69   void UpdateTabContext(const PermissionRequestID& id,
70                         const GURL& requesting_origin,
71                         bool allowed) override {
72     tab_context_updated_ = true;
73   }
74
75  private:
76    bool permission_set_;
77    bool permission_granted_;
78    bool tab_context_updated_;
79 };
80
81 // Simulates clicking Accept. The permission should be granted and
82 // saved for future use.
83 TEST_F(PermissionContextBaseTests, TestAskAndGrant) {
84   TestPermissionContext permission_context(profile(),
85                       CONTENT_SETTINGS_TYPE_PUSH_MESSAGING);
86   GURL url("http://www.google.com");
87   content::WebContentsTester::For(web_contents())->NavigateAndCommit(url);
88
89   const PermissionRequestID id(
90       web_contents()->GetRenderProcessHost()->GetID(),
91       web_contents()->GetRenderViewHost()->GetRoutingID(),
92       -1, GURL());
93   permission_context.RequestPermission(
94       web_contents(),
95       id, url, true,
96       base::Bind(&TestPermissionContext::TrackPermissionDecision,
97                  base::Unretained(&permission_context)));
98
99   permission_context.GetInfoBarController()->OnPermissionSet(
100       id, url, url, true, true);
101   EXPECT_TRUE(permission_context.permission_set());
102   EXPECT_TRUE(permission_context.permission_granted());
103   EXPECT_TRUE(permission_context.tab_context_updated());
104
105   ContentSetting setting =
106       profile()->GetHostContentSettingsMap()->GetContentSetting(
107           url.GetOrigin(), url.GetOrigin(),
108           CONTENT_SETTINGS_TYPE_PUSH_MESSAGING, std::string());
109   EXPECT_EQ(CONTENT_SETTING_ALLOW , setting);
110 };
111
112 // Simulates clicking Dismiss (X in the infobar.
113 // The permission should be denied but not saved for future use.
114 TEST_F(PermissionContextBaseTests, TestAskAndDismiss) {
115   TestPermissionContext permission_context(profile(),
116                       CONTENT_SETTINGS_TYPE_MIDI_SYSEX);
117   GURL url("http://www.google.es");
118   content::WebContentsTester::For(web_contents())->NavigateAndCommit(url);
119
120   const PermissionRequestID id(
121       web_contents()->GetRenderProcessHost()->GetID(),
122       web_contents()->GetRenderViewHost()->GetRoutingID(),
123       -1, GURL());
124   permission_context.RequestPermission(
125       web_contents(),
126       id, url, true,
127       base::Bind(&TestPermissionContext::TrackPermissionDecision,
128                  base::Unretained(&permission_context)));
129
130   permission_context.GetInfoBarController()->OnPermissionSet(
131       id, url, url, false, false);
132   EXPECT_TRUE(permission_context.permission_set());
133   EXPECT_FALSE(permission_context.permission_granted());
134   EXPECT_TRUE(permission_context.tab_context_updated());
135
136   ContentSetting setting =
137       profile()->GetHostContentSettingsMap()->GetContentSetting(
138           url.GetOrigin(), url.GetOrigin(),
139           CONTENT_SETTINGS_TYPE_MIDI_SYSEX, std::string());
140   EXPECT_EQ(CONTENT_SETTING_ASK , setting);
141 };