File: chrome_content_browser_client_extensions_part_unittest.cc

package info (click to toggle)
chromium 73.0.3683.75-1~deb9u1
  • links: PTS, VCS
  • area: main
  • in suites: stretch
  • size: 1,792,156 kB
  • sloc: cpp: 13,473,466; ansic: 1,577,080; python: 898,539; javascript: 655,737; xml: 341,883; asm: 306,070; java: 289,969; perl: 80,911; objc: 67,198; sh: 43,184; cs: 27,853; makefile: 12,092; php: 11,064; yacc: 10,373; tcl: 8,875; ruby: 3,941; lex: 1,800; pascal: 1,473; lisp: 812; awk: 41; jsp: 39; sed: 19; sql: 3
file content (71 lines) | stat: -rw-r--r-- 2,868 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
// Copyright 2017 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/extensions/chrome_content_browser_client_extensions_part.h"

#include <string>
#include <vector>

#include "base/test/metrics/histogram_tester.h"
#include "chrome/common/chrome_content_client.h"
#include "extensions/common/url_pattern_set.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace extensions {

typedef testing::Test ChromeContentBrowserClientExtensionsPartTest;

// Check that empty site URLs get recorded properly in ShouldAllowOpenURL
// failures.
TEST_F(ChromeContentBrowserClientExtensionsPartTest,
       ShouldAllowOpenURLMetricsForEmptySiteURL) {
  base::HistogramTester uma;

  auto failure_reason = ChromeContentBrowserClientExtensionsPart::
      FAILURE_SCHEME_NOT_HTTP_OR_HTTPS_OR_EXTENSION;
  ChromeContentBrowserClientExtensionsPart::RecordShouldAllowOpenURLFailure(
      failure_reason, GURL());
  uma.ExpectUniqueSample("Extensions.ShouldAllowOpenURL.Failure",
                         failure_reason, 1);
  uma.ExpectUniqueSample("Extensions.ShouldAllowOpenURL.Failure.Scheme",
                         1 /* SCHEME_EMPTY */, 1);
}

// Check that a non-exhaustive list of some known schemes get recorded properly
// in ShouldAllowOpenURL failures.
TEST_F(ChromeContentBrowserClientExtensionsPartTest,
       ShouldAllowOpenURLMetricsForKnownSchemes) {
  base::HistogramTester uma;

  ChromeContentClient content_client;
  content::ContentClient::Schemes schemes;
  content_client.AddAdditionalSchemes(&schemes);

  std::vector<std::string> test_schemes(schemes.savable_schemes);
  test_schemes.insert(test_schemes.end(), schemes.secure_schemes.begin(),
                      schemes.secure_schemes.end());
  test_schemes.insert(test_schemes.end(),
                      schemes.empty_document_schemes.begin(),
                      schemes.empty_document_schemes.end());
  test_schemes.push_back(url::kHttpScheme);
  test_schemes.push_back(url::kHttpsScheme);
  test_schemes.push_back(url::kFileScheme);

  auto failure_reason = ChromeContentBrowserClientExtensionsPart::
      FAILURE_RESOURCE_NOT_WEB_ACCESSIBLE;
  for (auto scheme : test_schemes) {
    ChromeContentBrowserClientExtensionsPart::RecordShouldAllowOpenURLFailure(
        failure_reason, GURL(scheme + "://foo.com/"));
  }

  // There should be no unknown schemes recorded.
  uma.ExpectUniqueSample("Extensions.ShouldAllowOpenURL.Failure",
                         failure_reason, test_schemes.size());
  uma.ExpectTotalCount("Extensions.ShouldAllowOpenURL.Failure.Scheme",
                       test_schemes.size());
  uma.ExpectBucketCount("Extensions.ShouldAllowOpenURL.Failure.Scheme",
                        0 /* SCHEME_UNKNOWN */, 0);
}

}  // namespace extensions