| OLD | NEW | 
|   1 // Copyright 2014 The Chromium Authors. All rights reserved. |   1 // Copyright 2015 The Chromium Authors. All rights reserved. | 
|   2 // Use of this source code is governed by a BSD-style license that can be |   2 // Use of this source code is governed by a BSD-style license that can be | 
|   3 // found in the LICENSE file. |   3 // found in the LICENSE file. | 
|   4  |   4  | 
|   5 #include "url/origin.h" |   5 #include "url/origin.h" | 
|   6  |   6  | 
 |   7 #include <string.h> | 
 |   8  | 
|   7 #include "base/logging.h" |   9 #include "base/logging.h" | 
|   8 #include "base/strings/pattern.h" |  10 #include "base/strings/string_number_conversions.h" | 
 |  11 #include "url/gurl.h" | 
 |  12 #include "url/url_canon.h" | 
 |  13 #include "url/url_canon_stdstring.h" | 
 |  14 #include "url/url_constants.h" | 
 |  15 #include "url/url_util.h" | 
|   9  |  16  | 
|  10 namespace url { |  17 namespace url { | 
|  11  |  18  | 
|  12 Origin::Origin() : string_("null") {} |  19 Origin::Origin() : unique_(true) { | 
 |  20 } | 
|  13  |  21  | 
|  14 Origin::Origin(const std::string& origin) : string_(origin) { |  22 Origin::Origin(const GURL& url) : unique_(true) { | 
|  15   DCHECK(origin == "null" || base::MatchPattern(origin, "?*://?*")); |  23   if (!url.is_valid() || (!url.IsStandard() && !url.SchemeIsBlob())) | 
|  16   DCHECK_GT(origin.size(), 0u); |  24     return; | 
|  17   DCHECK(origin == "file://" || origin[origin.size() - 1] != '/'); |  25  | 
 |  26   if (url.SchemeIsFileSystem()) { | 
 |  27     tuple_ = SchemeHostPort(*url.inner_url()); | 
 |  28   } else if (url.SchemeIsBlob()) { | 
 |  29     // If we're dealing with a 'blob:' URL, https://url.spec.whatwg.org/#origin | 
 |  30     // defines the origin as the origin of the URL which results from parsing | 
 |  31     // the "path", which boils down to everything after the scheme. GURL's | 
 |  32     // 'GetContent()' gives us exactly that. | 
 |  33     tuple_ = SchemeHostPort(GURL(url.GetContent())); | 
 |  34   } else { | 
 |  35     tuple_ = SchemeHostPort(url); | 
 |  36   } | 
 |  37  | 
 |  38   unique_ = tuple_.IsInvalid(); | 
 |  39 } | 
 |  40  | 
 |  41 Origin::Origin(base::StringPiece scheme, base::StringPiece host, uint16 port) | 
 |  42     : tuple_(scheme, host, port) { | 
 |  43   unique_ = tuple_.IsInvalid(); | 
 |  44 } | 
 |  45  | 
 |  46 Origin::~Origin() { | 
 |  47 } | 
 |  48  | 
 |  49 // static | 
 |  50 Origin Origin::UnsafelyCreateOriginWithoutNormalization( | 
 |  51     base::StringPiece scheme, | 
 |  52     base::StringPiece host, | 
 |  53     uint16 port) { | 
 |  54   return Origin(scheme, host, port); | 
 |  55 } | 
 |  56  | 
 |  57 std::string Origin::Serialize() const { | 
 |  58   if (unique()) | 
 |  59     return "null"; | 
 |  60  | 
 |  61   if (scheme() == kFileScheme) | 
 |  62     return "file://"; | 
 |  63  | 
 |  64   return tuple_.Serialize(); | 
 |  65 } | 
 |  66  | 
 |  67 bool Origin::IsSameOriginWith(const Origin& other) const { | 
 |  68   if (unique_ || other.unique_) | 
 |  69     return false; | 
 |  70  | 
 |  71   return tuple_.Equals(other.tuple_); | 
 |  72 } | 
 |  73  | 
 |  74 bool Origin::operator<(const Origin& other) const { | 
 |  75   return tuple_ < other.tuple_; | 
 |  76 } | 
 |  77  | 
 |  78 std::ostream& operator<<(std::ostream& out, const url::Origin& origin) { | 
 |  79   return out << origin.Serialize(); | 
|  18 } |  80 } | 
|  19  |  81  | 
|  20 }  // namespace url |  82 }  // namespace url | 
| OLD | NEW |