15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved.
25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file.
45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
51320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/common/extensions/manifest_tests/chrome_manifest_test.h"
6d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)#include "extensions/common/manifest_constants.h"
7f2477e01787aa58f445919b809d89e252beef54fTorne (Richard Coles)#include "extensions/common/manifest_handlers/csp_info.h"
85821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "testing/gtest/include/gtest/gtest.h"
95821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
10c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)namespace extensions {
11c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
12d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)namespace errors = manifest_errors;
13d0247b1b59f9c528cb6df88b4f2b9afaf80d181eTorne (Richard Coles)
141320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass SandboxedPagesManifestTest : public ChromeManifestTest {
152a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)};
162a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)
172a99a7e74a7f215066514fe81d2bfa6639d9edddTorne (Richard Coles)TEST_F(SandboxedPagesManifestTest, SandboxedPages) {
185821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sandboxed pages specified, no custom CSP value.
195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<Extension> extension1(
205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LoadAndExpectSuccess("sandboxed_pages_valid_1.json"));
215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // No sandboxed pages.
235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<Extension> extension2(
245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LoadAndExpectSuccess("sandboxed_pages_valid_2.json"));
255821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
265821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sandboxed pages specified with a custom CSP value.
275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<Extension> extension3(
285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LoadAndExpectSuccess("sandboxed_pages_valid_3.json"));
295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sandboxed pages specified with wildcard, no custom CSP value.
315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<Extension> extension4(
325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LoadAndExpectSuccess("sandboxed_pages_valid_4.json"));
335821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
345821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  // Sandboxed pages specified with filename wildcard, no custom CSP value.
355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  scoped_refptr<Extension> extension5(
365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      LoadAndExpectSuccess("sandboxed_pages_valid_5.json"));
375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
385821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kSandboxedCSP[] = "sandbox allow-scripts allow-forms allow-popups";
395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kDefaultCSP[] =
405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "script-src 'self' chrome-extension-resource:; object-src 'self'";
415821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  const char kCustomSandboxedCSP[] =
425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)      "sandbox; script-src: https://www.google.com";
435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
44c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)  EXPECT_EQ(
45c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)      kSandboxedCSP,
46868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      CSPInfo::GetResourceContentSecurityPolicy(extension1.get(), "/test"));
47868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(
48868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kDefaultCSP,
49868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      CSPInfo::GetResourceContentSecurityPolicy(extension1.get(), "/none"));
50868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(
51868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kDefaultCSP,
52868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      CSPInfo::GetResourceContentSecurityPolicy(extension2.get(), "/test"));
53868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(
54868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kCustomSandboxedCSP,
55868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      CSPInfo::GetResourceContentSecurityPolicy(extension3.get(), "/test"));
56868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(
57868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kDefaultCSP,
58868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      CSPInfo::GetResourceContentSecurityPolicy(extension3.get(), "/none"));
59868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(
60868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kSandboxedCSP,
61868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      CSPInfo::GetResourceContentSecurityPolicy(extension4.get(), "/test"));
62868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(kSandboxedCSP,
63868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)            CSPInfo::GetResourceContentSecurityPolicy(extension5.get(),
64868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)                                                      "/path/test.ext"));
65868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)  EXPECT_EQ(
66868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      kDefaultCSP,
67868fa2fe829687343ffae624259930155e16dbd8Torne (Richard Coles)      CSPInfo::GetResourceContentSecurityPolicy(extension5.get(), "/test"));
685821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)
695821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  Testcase testcases[] = {
705821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Testcase("sandboxed_pages_invalid_1.json",
715821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        errors::kInvalidSandboxedPagesList),
725821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Testcase("sandboxed_pages_invalid_2.json",
735821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        errors::kInvalidSandboxedPage),
745821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Testcase("sandboxed_pages_invalid_3.json",
755821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        errors::kInvalidSandboxedPagesCSP),
765821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Testcase("sandboxed_pages_invalid_4.json",
775821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        errors::kInvalidSandboxedPagesCSP),
785821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)    Testcase("sandboxed_pages_invalid_5.json",
795821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)        errors::kInvalidSandboxedPagesCSP)
805821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  };
815821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)  RunTestcases(testcases, arraysize(testcases),
825821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)               EXPECT_TYPE_ERROR);
835821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)}
84c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)
85c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)}  // namespace extensions
86