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
|
// Copyright 2023 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef CHROME_BROWSER_WEB_APPLICATIONS_SCOPE_EXTENSION_INFO_H_
#define CHROME_BROWSER_WEB_APPLICATIONS_SCOPE_EXTENSION_INFO_H_
#include <string>
#include <unordered_map>
#include "base/containers/flat_set.h"
#include "base/values.h"
#include "url/gurl.h"
#include "url/origin.h"
namespace base {
class Value;
} // namespace base
namespace web_app {
namespace proto {
class WebAppScopeExtension;
} // namespace proto
// Contains information about a web app's scope extension information derived
// from its web app manifest.
struct ScopeExtensionInfo {
ScopeExtensionInfo() = delete;
ScopeExtensionInfo(const ScopeExtensionInfo&) = default;
ScopeExtensionInfo& operator=(const ScopeExtensionInfo&) = default;
friend bool operator==(const ScopeExtensionInfo&,
const ScopeExtensionInfo&) = default;
friend auto operator<=>(const ScopeExtensionInfo&,
const ScopeExtensionInfo&) = default;
static ScopeExtensionInfo CreateForOrigin(url::Origin origin,
bool has_origin_wildcard = false);
static ScopeExtensionInfo CreateForScope(GURL scope,
bool has_origin_wildcard = false);
// Used specifically in WebAppDatabase::CreateWebAppProto
static ScopeExtensionInfo CreateForProto(
const proto::WebAppScopeExtension& web_app_scope_extension_proto);
// Reset the scope extension to its default state.
REINITIALIZES_AFTER_MOVE void Reset();
base::Value AsDebugValue() const;
url::Origin origin;
// Must be the same origin as `origin` else CHECK-fails.
// `scope` will also drop any queries or fragments from the URL per manifest
// scope rules: https://w3c.github.io/manifest/#scope-member
GURL scope;
bool has_origin_wildcard = false;
private:
ScopeExtensionInfo(url::Origin origin, GURL scope, bool has_origin_wildcard);
};
using ScopeExtensions = base::flat_set<ScopeExtensionInfo>;
using ScopeExtensionMap = std::unordered_map<std::string, ScopeExtensionInfo>;
} // namespace web_app
#endif // CHROME_BROWSER_WEB_APPLICATIONS_SCOPE_EXTENSION_INFO_H_
|