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

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: dsdsdsdjsdsj 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..a792f4dc0763d06b2a832f4c2fda5148141d0c03
--- /dev/null
+++ b/chrome/test/webdriver/cookie.cc
@@ -0,0 +1,155 @@
+// 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 "chrome/test/webdriver/cookie.h"
+
+#include <time.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 "chrome/test/webdriver/cookie.h"
+#include "chrome/test/webdriver/utility_functions.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_ = "";
+
+ valid_ = pc.IsValid();
+ if (!valid_)
+ 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_ = "";
+ }
+}
+
+// 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;
+ }
+ 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;
+#ifdef OS_WIN
+ char* buff = ctime(&clock);
+ if (NULL == buff) {
+ valid_ = false;
+ return;
+ }
+#else
+ char buff[128];
+ memset(buff, 0, sizeof(buff));
+
+ if (NULL == ctime_r(&clock, buff)) {
+ valid_ = false;
+ return;
+ }
+#endif
+ 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::ToDictionary() {
+ DictionaryValue* cookie = new DictionaryValue();
+
+ // Required parameters for WebDriver protocol.
+ cookie->SetString("name", name_);
+ cookie->SetString("value", value_);
+ cookie->SetString("path", path_);
+ cookie->SetString("domain", domain_);
+ cookie->SetBoolean("secure", secure_);
+ cookie->SetString("expiry", expires_);
+
+ // Chrome specific additons which are not a part of the JSON over HTTP spec.
+ 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() {
+ scoped_ptr<DictionaryValue> cookie(ToDictionary());
+ std::string json;
+
+ base::JSONWriter::Write(reinterpret_cast<Value*>(cookie.get()),
+ false, &json);
+ 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_ + ";";
+ }
+ 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