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

Unified Diff: chrome/test/webdriver/cookie.cc

Issue 6330012: Cookie commands for the webdriver protocol (Closed) Base URL: http://git.chromium.org/git/chromium.git@trunk
Patch Set: updates Created 9 years, 10 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/test/webdriver/cookie.cc
diff --git a/chrome/test/webdriver/cookie.cc b/chrome/test/webdriver/cookie.cc
new file mode 100644
index 0000000000000000000000000000000000000000..6fe9f65d4241bcef436fe8f708d4dd0ecb57a20e
--- /dev/null
+++ b/chrome/test/webdriver/cookie.cc
@@ -0,0 +1,159 @@
+// Copyright (c) 2010 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.
+
+#include <time.h>
kkania 2011/02/08 18:35:22 this is the wrong include order. See my earlier co
Joe 2011/02/09 06:32:10 Done.
+
+#include "chrome/test/webdriver/cookie.h"
+#include "chrome/test/webdriver/utility_functions.h"
+
+#include "base/string_util.h"
+#include "base/utf_string_conversions.h"
+#include "base/values.h"
+#include "base/json/json_reader.h"
+#include "base/json/json_writer.h"
+#include "net/base/cookie_monster.h"
+
+namespace webdriver {
+
+// Convert from a string format.
+Cookie::Cookie(const std::string& cookie) {
+ net::CookieMonster::ParsedCookie pc(cookie);
+ expires_ = "";
+
+ if (!pc.IsValid()) {
kkania 2011/02/08 18:35:22 change to: valid_ = pc.IsValid(); if (!valid_) r
Joe 2011/02/09 06:32:10 Done.
+ return;
+ }
+
+ name_ = pc.Name();
+ value_ = pc.Value();
+ secure_ = pc.IsSecure();
+ http_ = pc.IsHttpOnly();
+
+ if (pc.HasPath()) {
+ path_ = pc.Path();
+ } else {
+ path_ = "";
+ }
+
+ if (pc.HasDomain()) {
+ domain_ = pc.Domain();
+ } else {
+ domain_ = "";
+ }
+
+ if (pc.HasExpires()) {
+ expires_ = pc.Expires();
+ } else {
+ expires_ = "";
+ }
+
+ valid_ = true;
+}
+
+// Convert from a webdriver JSON representation of a cookie.
+Cookie::Cookie(const DictionaryValue& dict) {
+ int expiry;
+ valid_ = false;
+
+ // Name and Value are required paramters.
+ if (!dict.GetString("name", &name_)) {
+ return;
+ }
+
kkania 2011/02/08 18:35:22 limit use of your newlines in code.
Joe 2011/02/09 06:32:10 Done.
+ if (!dict.GetString("value", &value_)) {
+ return;
+ }
+
+ if (!dict.GetString("path", &path_)) {
+ path_ = "";
+ }
+
+ if (dict.GetString("domain", &domain_)) {
+ domain_ = "";
+ }
+
+ if (dict.GetBoolean("secure", &secure_)) {
+ secure_ = false;
+ }
+
+ // Convert the time passed into human-readable format.
+ if (dict.GetInteger("expiry", &expiry)) {
+ time_t clock = (time_t) expiry;
+ char buff[128];
+
+ memset(buff, 0, sizeof(buff));
+ if (NULL == ctime_r(&clock, buff)) {
+ valid_ = false;
+ return;
+ }
+ expires_ = std::string(buff);
+ }
+
+ valid_ = true;
+}
+
+// Convert's to webdriver's cookie spec, see:
+// http://code.google.com/p/selenium/wiki/JsonWireProtocol#/session/:sessionId/cookie
+DictionaryValue* Cookie::ToJSON() {
+ DictionaryValue* cookie = new DictionaryValue();
+
+ // Required parameters for WebDriver protocol.
+ cookie->SetString("name", ASCIIToUTF16(name_));
kkania 2011/02/08 18:35:22 I don't think you need the ASCII to UTF16 conversi
Joe 2011/02/09 06:32:10 Done.
+ cookie->SetString("value", ASCIIToUTF16(value_));
+ cookie->SetString("path", ASCIIToUTF16(path_));
+ cookie->SetString("domain", ASCIIToUTF16(domain_));
+ cookie->SetBoolean("secure", secure_);
+
+ // Chrome specific additons which are not a part of the JSON over HTTP spec.
+ cookie->SetString("expiry", ASCIIToUTF16(expires_));
kkania 2011/02/08 18:35:22 expiry is part of the spec now. put it above this
Joe 2011/02/09 06:32:10 Done.
+ cookie->SetBoolean("http_only", http_);
+
+ return cookie;
+}
+
+// Returns a string representation of the JSON webdriver format. This is
+// used when logging cookies sent/recieved on the server.
+std::string Cookie::ToJSONString() {
+ DictionaryValue* cookie;
kkania 2011/02/08 18:35:22 use scoped_ptr
Joe 2011/02/09 06:32:10 Done.
+ std::string json;
+
+ cookie = ToJSON();
+ base::JSONWriter::Write(reinterpret_cast<Value*>(&cookie),
kkania 2011/02/08 18:35:22 use static_cast
Joe 2011/02/09 06:32:10 That's not possible On 2011/02/08 18:35:22, kkania
+ false, &json);
+ delete cookie;
+ return json;
+}
+
+// Returns a string representation of the cookie to be used by Automation Proxy.
+// TODO(jmikhail): Add function to Automation Proxy that can set a cookie by
+// using a DictionaryValue object.
+std::string Cookie::ToString() {
+ std::string cookie = "";
+ cookie += name_ + "=" + value_ + ";";
+
+ if (path_ != "") {
+ cookie += "path=" + path_ + ";";
+ }
+
kkania 2011/02/08 18:35:22 limit use of newlines
+ if (domain_ != "") {
+ cookie += "domain=" + domain_ + ";";
+ }
+
+ if (secure_) {
+ cookie += "secure;";
+ }
+
+ if (expires_ != "") {
+ cookie += expires_ + ";";
+ }
+
+ if (http_) {
+ cookie += "http_only;";
+ }
+
+ return cookie;
+}
+
+} // namespace webdriver
+

Powered by Google App Engine
This is Rietveld 408576698