Fixes option-right in textfields when VoiceOver is set to read to the right of the...
[chromium-blink-merge.git] / chrome / renderer / chrome_content_renderer_client_unittest.cc
blob3283b3957c703a605aa6b90f62c6992564d39b12
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
3 // found in the LICENSE file.
5 #include "chrome/renderer/chrome_content_renderer_client.h"
7 #include "base/utf_string_conversions.h"
8 #include "googleurl/src/gurl.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 #include "third_party/WebKit/Source/Platform/chromium/public/WebString.h"
11 #include "third_party/WebKit/Source/WebKit/chromium/public/platform/WebVector.h"
12 #include "third_party/WebKit/Source/WebKit/chromium/public/WebPluginParams.h"
13 #include "webkit/plugins/webplugininfo.h"
15 using WebKit::WebPluginParams;
16 using WebKit::WebString;
17 using WebKit::WebVector;
18 using chrome::ChromeContentRendererClient;
19 using webkit::WebPluginInfo;
20 using webkit::WebPluginMimeType;
22 namespace chrome {
24 namespace {
25 const bool kNaClRestricted = false;
26 const bool kNaClUnrestricted = true;
27 const bool kExtensionRestricted = false;
28 const bool kExtensionUnrestricted = true;
29 const bool kExtensionNotFromWebStore = false;
30 const bool kExtensionFromWebStore = true;
32 const char kNaClMimeType[] = "application/x-nacl";
34 bool AllowsDevInterfaces(const WebPluginParams& params) {
35 for (size_t i = 0; i < params.attributeNames.size(); ++i) {
36 if (params.attributeNames[i] == WebString::fromUTF8("@dev"))
37 return true;
39 return false;
42 void AddFakeDevAttribute(WebPluginParams* params) {
43 WebVector<WebString> names(static_cast<size_t>(1));
44 WebVector<WebString> values(static_cast<size_t>(1));
45 names[0] = WebString::fromUTF8("@dev");
46 values[0] = WebString();
47 params->attributeNames.swap(names);
48 params->attributeValues.swap(values);
51 void AddContentTypeHandler(WebPluginInfo* info,
52 const char* mime_type,
53 const char* manifest_url) {
54 WebPluginMimeType mime_type_info;
55 mime_type_info.mime_type = mime_type;
56 mime_type_info.additional_param_names.push_back(UTF8ToUTF16("nacl"));
57 mime_type_info.additional_param_values.push_back(
58 UTF8ToUTF16(manifest_url));
59 info->mime_types.push_back(mime_type_info);
61 } // namespace
63 typedef testing::Test ChromeContentRendererClientTest;
65 TEST_F(ChromeContentRendererClientTest, NaClRestriction) {
66 // Unknown content types have no NaCl module.
68 WebPluginInfo info;
69 EXPECT_EQ(GURL(),
70 ChromeContentRendererClient::GetNaClContentHandlerURL(
71 "application/x-foo", info));
73 // Known content types have a NaCl module.
75 WebPluginInfo info;
76 AddContentTypeHandler(&info, "application/x-foo", "www.foo.com");
77 EXPECT_EQ(GURL("www.foo.com"),
78 ChromeContentRendererClient::GetNaClContentHandlerURL(
79 "application/x-foo", info));
81 // --enable-nacl allows all NaCl apps, with 'dev' interfaces.
83 WebPluginParams params;
84 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
85 GURL(), GURL(), kNaClUnrestricted, kExtensionRestricted,
86 kExtensionNotFromWebStore, &params));
87 EXPECT_TRUE(AllowsDevInterfaces(params));
89 // Unrestricted extensions are allowed without --enable-nacl, with 'dev'
90 // interfaces.
92 WebPluginParams params;
93 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
94 GURL(), GURL(), kNaClRestricted, kExtensionUnrestricted,
95 kExtensionNotFromWebStore, &params));
96 EXPECT_TRUE(AllowsDevInterfaces(params));
98 // CWS extensions are allowed without --enable-nacl, without 'dev'
99 // interfaces.
101 WebPluginParams params;
102 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
103 GURL(), GURL(), kNaClRestricted, kExtensionRestricted,
104 kExtensionFromWebStore, &params));
105 EXPECT_FALSE(AllowsDevInterfaces(params));
107 // CWS extensions can't get 'dev' interfaces with --enable-nacl.
109 WebPluginParams params;
110 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
111 GURL(), GURL(), kNaClUnrestricted, kExtensionRestricted,
112 kExtensionFromWebStore, &params));
113 EXPECT_FALSE(AllowsDevInterfaces(params));
115 // CWS extensions can't get 'dev' interfaces by injecting a fake
116 // '@dev' attribute.
118 WebPluginParams params;
119 AddFakeDevAttribute(&params);
120 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
121 GURL(), GURL(), kNaClRestricted, kExtensionRestricted,
122 kExtensionFromWebStore, &params));
123 EXPECT_FALSE(AllowsDevInterfaces(params));
125 // The NaCl PDF extension is allowed without --enable-nacl, with 'dev'
126 // interfaces.
128 WebPluginParams params;
129 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
130 GURL("chrome-extension://acadkphlmlegjaadjagenfimbpphcgnh"),
131 GURL(), kNaClRestricted, kExtensionRestricted,
132 kExtensionFromWebStore, &params));
133 EXPECT_TRUE(AllowsDevInterfaces(params));
135 // Whitelisted URLs are allowed without --enable-nacl, without 'dev'
136 // interfaces.
138 WebPluginParams params;
139 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
140 GURL(), GURL("http://plus.google.com/games"),
141 kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
142 &params));
143 EXPECT_FALSE(AllowsDevInterfaces(params));
144 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
145 GURL(), GURL("https://plus.google.com/games"),
146 kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
147 &params));
148 EXPECT_FALSE(AllowsDevInterfaces(params));
149 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
150 GURL(), GURL("https://plus.google.com/games/209089085730"),
151 kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
152 &params));
153 EXPECT_FALSE(AllowsDevInterfaces(params));
154 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
155 GURL(), GURL("http://plus.sandbox.google.com/games"),
156 kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
157 &params));
158 EXPECT_FALSE(AllowsDevInterfaces(params));
159 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
160 GURL(), GURL("https://plus.sandbox.google.com/games"),
161 kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
162 &params));
163 EXPECT_FALSE(AllowsDevInterfaces(params));
164 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
165 GURL(), GURL("https://plus.google.com/games/209089085730"),
166 kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
167 &params));
168 EXPECT_FALSE(AllowsDevInterfaces(params));
170 // Whitelisted URLs can't get 'dev' interfaces with --enable-nacl.
172 WebPluginParams params;
173 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
174 GURL(), GURL("https://plus.google.com/games/209089085730"),
175 kNaClUnrestricted, kExtensionRestricted, kExtensionNotFromWebStore,
176 &params));
177 EXPECT_FALSE(AllowsDevInterfaces(params));
179 // Whitelisted URLs can't get 'dev' interfaces by injecting a fake
180 // '@dev' attribute.
182 WebPluginParams params;
183 AddFakeDevAttribute(&params);
184 EXPECT_TRUE(ChromeContentRendererClient::IsNaClAllowed(
185 GURL(), GURL("https://plus.google.com/games/209089085730"),
186 kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
187 &params));
188 EXPECT_FALSE(AllowsDevInterfaces(params));
190 // Non-whitelisted URLs are blocked without --enable-nacl.
192 WebPluginParams params;
193 EXPECT_FALSE(ChromeContentRendererClient::IsNaClAllowed(
194 GURL(), GURL("http://plus.google.com.evil.com/games"),
195 kNaClRestricted, kExtensionRestricted, kExtensionNotFromWebStore,
196 &params));
200 } // namespace chrome