910e62b5创建于 1月15日历史提交
// Copyright 2018 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "extensions/browser/permissions/permissions_test_util.h"

#include "base/logging.h"
#include "base/run_loop.h"
#include "content/public/browser/browser_context.h"
#include "extensions/buildflags/buildflags.h"
#include "extensions/common/extension.h"
#include "extensions/common/permissions/permission_set.h"

static_assert(BUILDFLAG(ENABLE_EXTENSIONS_CORE));

namespace extensions {

namespace {
constexpr char kChromeUIFaviconURL[] = "chrome://favicon/";
}

namespace permissions_test_util {

std::vector<std::string> GetPatternsAsStrings(const URLPatternSet& patterns) {
  std::vector<std::string> pattern_strings;
  pattern_strings.reserve(patterns.size());
  for (const auto& pattern : patterns) {
    // chrome://favicon/ is automatically added as a pattern when the extension
    // requests access to <all_urls>, but isn't really a host pattern (it allows
    // the extension to retrieve a favicon for a given URL). Just ignore it when
    // generating host sets.
    std::string pattern_string = pattern.GetAsString();
    if (pattern_string != std::string(kChromeUIFaviconURL) + "*") {
      pattern_strings.push_back(pattern_string);
    }
  }

  return pattern_strings;
}

void GrantOptionalPermissionsAndWaitForCompletion(
    content::BrowserContext* browser_context,
    const Extension& extension,
    const PermissionSet& permissions) {
  base::RunLoop run_loop;
  PermissionsUpdater(browser_context)
      .GrantOptionalPermissions(extension, permissions, run_loop.QuitClosure());
  run_loop.Run();
}

void GrantRuntimePermissionsAndWaitForCompletion(
    content::BrowserContext* browser_context,
    const Extension& extension,
    const PermissionSet& permissions) {
  base::RunLoop run_loop;
  PermissionsUpdater(browser_context)
      .GrantRuntimePermissions(extension, permissions, run_loop.QuitClosure());
  run_loop.Run();
}

void RevokeOptionalPermissionsAndWaitForCompletion(
    content::BrowserContext* browser_context,
    const Extension& extension,
    const PermissionSet& permissions,
    PermissionsUpdater::RemoveType remove_type) {
  base::RunLoop run_loop;
  PermissionsUpdater(browser_context)
      .RevokeOptionalPermissions(extension, permissions, remove_type,
                                 run_loop.QuitClosure());
  run_loop.Run();
}

void RevokeRuntimePermissionsAndWaitForCompletion(
    content::BrowserContext* browser_context,
    const Extension& extension,
    const PermissionSet& permissions) {
  base::RunLoop run_loop;
  PermissionsUpdater(browser_context)
      .RevokeRuntimePermissions(extension, permissions, run_loop.QuitClosure());
  run_loop.Run();
}

}  // namespace permissions_test_util
}  // namespace extensions