| Index: components/subresource_filter/core/common/first_party_origin.h
|
| diff --git a/components/subresource_filter/core/common/first_party_origin.h b/components/subresource_filter/core/common/first_party_origin.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..b05dcf1165d9305b1469479197890bad8928b840
|
| --- /dev/null
|
| +++ b/components/subresource_filter/core/common/first_party_origin.h
|
| @@ -0,0 +1,55 @@
|
| +// Copyright 2016 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.
|
| +
|
| +#ifndef COMPONENTS_SUBRESOURCE_FILTER_CORE_COMMON_FIRST_PARTY_ORIGIN_H_
|
| +#define COMPONENTS_SUBRESOURCE_FILTER_CORE_COMMON_FIRST_PARTY_ORIGIN_H_
|
| +
|
| +#include <string>
|
| +
|
| +#include "url/gurl.h"
|
| +#include "url/origin.h"
|
| +
|
| +namespace subresource_filter {
|
| +
|
| +// Encapsulates the first-party origin of a document, and provides fast (cached)
|
| +// third-partiness checks against that origin, i.e. whether a given URL is
|
| +// third-party in relation to the document's origin.
|
| +//
|
| +// It uses a simple one-entry cache to optimize for the case when a significant
|
| +// number of consecutive URLs have the same domain.
|
| +class FirstPartyOrigin {
|
| + public:
|
| + explicit FirstPartyOrigin(url::Origin document_origin);
|
| +
|
| + const url::Origin& origin() const { return document_origin_; }
|
| +
|
| + // Returns whether |url| is a third-party in relation to |this| origin. May
|
| + // return a cached value. May update the cache.
|
| + bool IsThirdParty(const GURL& url) const;
|
| +
|
| + // Returns whether |url| is a third party in respect to |first_party_origin|.
|
| + static bool IsThirdParty(const GURL& url,
|
| + const url::Origin& first_party_origin);
|
| +
|
| + private:
|
| + url::Origin document_origin_;
|
| +
|
| + // NOTE: GURL is needed to work around the slightly inefficient interfaces of
|
| + // net::registry_controlled_domains.
|
| + GURL document_origin_as_gurl_;
|
| +
|
| + // One-entry cache that stores input/output of the last IsThirdParty
|
| + // call.
|
| + //
|
| + // NOTE: registry_controlled_domains::SameDomainOrHost takes GURLs as inputs,
|
| + // but the cache entry stores only the host part of a GURL. It is assumed that
|
| + // SameDomainOrHost will return the same result for a GURL which has the same
|
| + // non-empty host part as the cached one.
|
| + mutable std::string last_checked_host_;
|
| + mutable bool last_checked_host_was_third_party_ = false;
|
| +};
|
| +
|
| +} // namespace subresource_filter
|
| +
|
| +#endif // COMPONENTS_SUBRESOURCE_FILTER_CORE_COMMON_FIRST_PARTY_ORIGIN_H_
|
|
|