Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(383)

Unified Diff: chrome/browser/extensions/api/cookies/cookies_helpers.cc

Issue 10702088: Refactor chrome.cookies API to use JSON schema compiler. (Closed) Base URL: http://git.chromium.org/chromium/src.git@master
Patch Set: Sync Created 8 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/extensions/api/cookies/cookies_helpers.cc
diff --git a/chrome/browser/extensions/api/cookies/cookies_helpers.cc b/chrome/browser/extensions/api/cookies/cookies_helpers.cc
index 5bab1aa38badab5479fa57257f90978a9b8f26d6..6a82b62f2d262b35552bb99509c20001dc8d035f 100644
--- a/chrome/browser/extensions/api/cookies/cookies_helpers.cc
+++ b/chrome/browser/extensions/api/cookies/cookies_helpers.cc
@@ -6,7 +6,11 @@
#include "chrome/browser/extensions/api/cookies/cookies_helpers.h"
+#include <vector>
+
#include "base/logging.h"
+#include "base/memory/linked_ptr.h"
+#include "base/memory/scoped_ptr.h"
#include "base/string_util.h"
#include "base/utf_string_conversions.h"
#include "base/values.h"
@@ -16,6 +20,7 @@
#include "chrome/browser/ui/browser.h"
#include "chrome/browser/ui/tab_contents/tab_contents.h"
#include "chrome/browser/ui/tabs/tab_strip_model.h"
+#include "chrome/common/extensions/api/cookies.h"
#include "chrome/common/extensions/extension.h"
#include "chrome/common/url_constants.h"
#include "content/public/browser/web_contents.h"
@@ -23,6 +28,11 @@
#include "net/cookies/canonical_cookie.h"
#include "net/cookies/cookie_util.h"
+using extensions::api::cookies::Cookie;
+using extensions::api::cookies::CookieStore;
+
+namespace GetAll = extensions::api::cookies::GetAll;
+
namespace extensions {
namespace keys = cookies_api_constants;
@@ -52,42 +62,45 @@ const char* GetStoreIdFromProfile(Profile* profile) {
kOffTheRecordProfileStoreId : kOriginalProfileStoreId;
}
-DictionaryValue* CreateCookieValue(const net::CanonicalCookie& cookie,
- const std::string& store_id) {
- DictionaryValue* result = new DictionaryValue();
-
- // A cookie is a raw byte sequence. By explicitly parsing it as UTF8, we
- // apply error correction, so the string can be safely passed to the
- // renderer.
- result->SetString(keys::kNameKey, UTF8ToUTF16(cookie.Name()));
- result->SetString(keys::kValueKey, UTF8ToUTF16(cookie.Value()));
- result->SetString(keys::kDomainKey, cookie.Domain());
- result->SetBoolean(keys::kHostOnlyKey,
- net::cookie_util::DomainIsHostOnly(cookie.Domain()));
-
+scoped_ptr<Cookie> CreateCookie(
+ const net::CanonicalCookie& canonical_cookie,
+ const std::string& store_id) {
+ scoped_ptr<Cookie> cookie(new Cookie());
+
+ // A cookie is a raw byte sequence. By explicitly parsing it as UTF-8, we
+ // apply error correction, so the string can be safely passed to the renderer.
+ cookie->name = UTF16ToUTF8(UTF8ToUTF16(canonical_cookie.Name()));
+ cookie->value = UTF16ToUTF8(UTF8ToUTF16(canonical_cookie.Value()));
+ cookie->domain = canonical_cookie.Domain();
+ cookie->host_only = net::cookie_util::DomainIsHostOnly(
+ canonical_cookie.Domain());
// A non-UTF8 path is invalid, so we just replace it with an empty string.
- result->SetString(keys::kPathKey,
- IsStringUTF8(cookie.Path()) ? cookie.Path() : "");
- result->SetBoolean(keys::kSecureKey, cookie.IsSecure());
- result->SetBoolean(keys::kHttpOnlyKey, cookie.IsHttpOnly());
- result->SetBoolean(keys::kSessionKey, !cookie.IsPersistent());
- if (cookie.IsPersistent()) {
- result->SetDouble(keys::kExpirationDateKey,
- cookie.ExpiryDate().ToDoubleT());
+ cookie->path = IsStringUTF8(canonical_cookie.Path()) ?
+ canonical_cookie.Path() : "";
+ cookie->secure = canonical_cookie.IsSecure();
+ cookie->http_only = canonical_cookie.IsHttpOnly();
+ cookie->session = !canonical_cookie.IsPersistent();
+ if (canonical_cookie.IsPersistent()) {
+ cookie->expiration_date.reset(
+ new double(canonical_cookie.ExpiryDate().ToDoubleT()));
}
- result->SetString(keys::kStoreIdKey, store_id);
+ cookie->store_id = store_id;
- return result;
+ return cookie.Pass();
}
-DictionaryValue* CreateCookieStoreValue(Profile* profile,
- ListValue* tab_ids) {
+scoped_ptr<CookieStore> CreateCookieStore(Profile* profile,
+ ListValue* tab_ids) {
DCHECK(profile);
DCHECK(tab_ids);
- DictionaryValue* result = new DictionaryValue();
- result->SetString(keys::kIdKey, GetStoreIdFromProfile(profile));
- result->Set(keys::kTabIdsKey, tab_ids);
- return result;
+ DictionaryValue dict;
+ dict.SetString(keys::kIdKey, GetStoreIdFromProfile(profile));
+ dict.Set(keys::kTabIdsKey, tab_ids);
+
+ CookieStore* cookie_store = new CookieStore();
+ bool rv = CookieStore::Populate(dict, cookie_store);
+ CHECK(rv);
+ return scoped_ptr<CookieStore>(cookie_store);
}
void GetCookieListFromStore(
@@ -112,12 +125,11 @@ GURL GetURLFromCanonicalCookie(const net::CanonicalCookie& cookie) {
return GURL(scheme + content::kStandardSchemeSeparator + host + "/");
}
-void AppendMatchingCookiesToList(
- const net::CookieList& all_cookies,
- const std::string& store_id,
- const GURL& url, const DictionaryValue* details,
- const Extension* extension,
- ListValue* match_list) {
+void AppendMatchingCookiesToVector(const net::CookieList& all_cookies,
+ const GURL& url,
+ const GetAll::Params::Details* details,
+ const Extension* extension,
+ LinkedCookieVec* match_vector) {
net::CookieList::const_iterator it;
for (it = all_cookies.begin(); it != all_cookies.end(); ++it) {
// Ignore any cookie whose domain doesn't match the extension's
@@ -127,8 +139,10 @@ void AppendMatchingCookiesToList(
continue;
// Filter the cookie using the match filter.
cookies_helpers::MatchFilter filter(details);
- if (filter.MatchesCookie(*it))
- match_list->Append(CreateCookieValue(*it, store_id));
+ if (filter.MatchesCookie(*it)) {
+ match_vector->push_back(make_linked_ptr(
+ CreateCookie(*it, *details->store_id).release()));
+ }
}
}
@@ -143,45 +157,38 @@ void AppendToTabIdList(Browser* browser, ListValue* tab_ids) {
}
}
-MatchFilter::MatchFilter(const DictionaryValue* details)
+MatchFilter::MatchFilter(const GetAll::Params::Details* details)
: details_(details) {
DCHECK(details_);
}
-bool MatchFilter::MatchesCookie(const net::CanonicalCookie& cookie) {
- return MatchesString(keys::kNameKey, cookie.Name()) &&
- MatchesDomain(cookie.Domain()) &&
- MatchesString(keys::kPathKey, cookie.Path()) &&
- MatchesBoolean(keys::kSecureKey, cookie.IsSecure()) &&
- MatchesBoolean(keys::kSessionKey, !cookie.IsPersistent());
-}
+bool MatchFilter::MatchesCookie(
+ const net::CanonicalCookie& cookie) {
+ if (details_->name.get() && *details_->name != cookie.Name())
+ return false;
-bool MatchFilter::MatchesString(const char* key, const std::string& value) {
- if (!details_->HasKey(key))
- return true;
- std::string filter_value;
- return (details_->GetString(key, &filter_value) &&
- value == filter_value);
-}
+ if (!MatchesDomain(cookie.Domain()))
+ return false;
-bool MatchFilter::MatchesBoolean(const char* key, bool value) {
- if (!details_->HasKey(key))
- return true;
- bool filter_value = false;
- return (details_->GetBoolean(key, &filter_value) &&
- value == filter_value);
+ if (details_->path.get() && *details_->path != cookie.Path())
+ return false;
+
+ if (details_->secure.get() && *details_->secure != cookie.IsSecure())
+ return false;
+
+ if (details_->session.get() && *details_->session != !cookie.IsPersistent())
+ return false;
+
+ return true;
}
bool MatchFilter::MatchesDomain(const std::string& domain) {
- if (!details_->HasKey(keys::kDomainKey))
+ if (!details_->domain.get())
return true;
- std::string filter_value;
- if (!details_->GetString(keys::kDomainKey, &filter_value))
- return false;
// Add a leading '.' character to the filter domain if it doesn't exist.
- if (net::cookie_util::DomainIsHostOnly(filter_value))
- filter_value.insert(0, ".");
+ if (net::cookie_util::DomainIsHostOnly(*details_->domain))
+ details_->domain->insert(0, ".");
std::string sub_domain(domain);
// Strip any leading '.' character from the input cookie domain.
@@ -190,8 +197,8 @@ bool MatchFilter::MatchesDomain(const std::string& domain) {
// Now check whether the domain argument is a subdomain of the filter domain.
for (sub_domain.insert(0, ".");
- sub_domain.length() >= filter_value.length();) {
- if (sub_domain == filter_value)
+ sub_domain.length() >= details_->domain->length();) {
+ if (sub_domain == *details_->domain)
return true;
const size_t next_dot = sub_domain.find('.', 1); // Skip over leading dot.
sub_domain.erase(0, next_dot);
« no previous file with comments | « chrome/browser/extensions/api/cookies/cookies_helpers.h ('k') | chrome/browser/extensions/api/cookies/cookies_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698