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

Unified Diff: cloud_print/service/win/service_state.cc

Issue 10505010: Root solution for src/cloud_print. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 6 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
« no previous file with comments | « cloud_print/service/win/service_state.h ('k') | cloud_print/service/win/service_state_unittest.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: cloud_print/service/win/service_state.cc
diff --git a/cloud_print/service/win/service_state.cc b/cloud_print/service/win/service_state.cc
deleted file mode 100644
index 864100001e3b75670e8cdccabd5e902b925e9a1a..0000000000000000000000000000000000000000
--- a/cloud_print/service/win/service_state.cc
+++ /dev/null
@@ -1,211 +0,0 @@
-// Copyright (c) 2012 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 "cloud_print/service/win/service_state.h"
-
-#include "base/json/json_reader.h"
-#include "base/json/json_writer.h"
-#include "base/logging.h"
-#include "base/message_loop.h"
-#include "base/string_util.h"
-#include "base/utf_string_conversions.h"
-#include "net/base/escape.h"
-#include "net/base/io_buffer.h"
-#include "net/url_request/url_request.h"
-#include "net/url_request/url_request_context.h"
-#include "net/url_request/url_request_context_builder.h"
-
-namespace {
-
-const char kCloudPrintJsonName[] = "cloud_print";
-const char kEnabledOptionName[] = "enabled";
-
-const char kEmailOptionName[] = "email";
-const char kPasswordOptionName[] = "password";
-const char kProxyIdOptionName[] = "proxy_id";
-const char kRobotEmailOptionName[] = "robot_email";
-const char kRobotTokenOptionName[] = "robot_refresh_token";
-const char kAuthTokenOptionName[] = "auth_token";
-const char kXmppAuthTokenOptionName[] = "xmpp_auth_token";
-
-const char kClientLoginUrl[] = "https://www.google.com/accounts/ClientLogin";
-
-const int64 kRequestTimeoutMs = 10 * 1000;
-
-class ServiceStateURLRequestDelegate : public net::URLRequest::Delegate {
- public:
- virtual void OnResponseStarted(net::URLRequest* request) {
- if (request->GetResponseCode() == 200) {
- Read(request);
- if (request->status().is_io_pending())
- return;
- }
- request->Cancel();
- };
-
- virtual void OnReadCompleted(net::URLRequest* request, int bytes_read) {
- Read(request);
- if (!request->status().is_io_pending())
- MessageLoop::current()->Quit();
- };
-
- const std::string& data() const {
- return data_;
- }
-
- private:
- void Read(net::URLRequest* request) {
- // Read as many bytes as are available synchronously.
- const int kBufSize = 100000;
- scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(kBufSize));
- int num_bytes = 0;
- while (request->Read(buf, kBufSize, &num_bytes)) {
- data_.append(buf->data(), buf->data() + num_bytes);
- }
- }
- std::string data_;
-};
-
-
-void SetNotEmptyJsonString(base::DictionaryValue* dictionary,
- const std::string& name,
- const std::string& value) {
- if (!value.empty())
- dictionary->SetString(name, value);
-}
-
-} // namespace
-
-ServiceState::ServiceState() {
- Reset();
-}
-
-ServiceState::~ServiceState() {
-}
-
-void ServiceState::Reset() {
- email_.clear();
- proxy_id_.clear();
- robot_email_.clear();
- robot_token_.clear();
- auth_token_.clear();
- xmpp_auth_token_.clear();
-}
-
-bool ServiceState::FromString(const std::string& json) {
- Reset();
- scoped_ptr<base::Value> data(base::JSONReader::Read(json));
- if (!data.get())
- return false;
-
- const base::DictionaryValue* services = NULL;
- if (!data->GetAsDictionary(&services))
- return false;
-
- base::DictionaryValue* cloud_print = NULL;
- if (!services->GetDictionary(kCloudPrintJsonName, &cloud_print))
- return false;
-
- bool valid_file = true;
- // Don't exit on fail. Collect all data for re-use by user later.
- if (!cloud_print->GetBoolean(kEnabledOptionName, &valid_file))
- valid_file = false;
-
- cloud_print->GetString(kEmailOptionName, &email_);
- cloud_print->GetString(kProxyIdOptionName, &proxy_id_);
- cloud_print->GetString(kRobotEmailOptionName, &robot_email_);
- cloud_print->GetString(kRobotTokenOptionName, &robot_token_);
- cloud_print->GetString(kAuthTokenOptionName, &auth_token_);
- cloud_print->GetString(kXmppAuthTokenOptionName, &xmpp_auth_token_);
-
- return valid_file && IsValid();
-}
-
-bool ServiceState::IsValid() const {
- if (email_.empty() || proxy_id_.empty())
- return false;
- bool valid_robot = !robot_email_.empty() && !robot_token_.empty();
- bool valid_auth = !auth_token_.empty() && !xmpp_auth_token_.empty();
- return valid_robot || valid_auth;
-}
-
-std::string ServiceState::ToString() {
- scoped_ptr<base::DictionaryValue> services(new DictionaryValue());
-
- scoped_ptr<base::DictionaryValue> cloud_print(new DictionaryValue());
- cloud_print->SetBoolean(kEnabledOptionName, true);
-
- SetNotEmptyJsonString(cloud_print.get(), kEmailOptionName, email_);
- SetNotEmptyJsonString(cloud_print.get(), kProxyIdOptionName, proxy_id_);
- SetNotEmptyJsonString(cloud_print.get(), kRobotEmailOptionName, robot_email_);
- SetNotEmptyJsonString(cloud_print.get(), kRobotTokenOptionName, robot_token_);
- SetNotEmptyJsonString(cloud_print.get(), kAuthTokenOptionName, auth_token_);
- SetNotEmptyJsonString(cloud_print.get(), kXmppAuthTokenOptionName,
- xmpp_auth_token_);
-
- services->Set(kCloudPrintJsonName, cloud_print.release());
-
- std::string json;
- base::JSONWriter::WriteWithOptions(services.get(),
- base::JSONWriter::OPTIONS_PRETTY_PRINT,
- &json);
- return json;
-}
-
-std::string ServiceState::LoginToGoogle(const std::string& service,
- const std::string& email,
- const std::string& password) {
- MessageLoop loop(MessageLoop::TYPE_IO);
-
- net::URLRequestContextBuilder builder;
- scoped_ptr<net::URLRequestContext> context(builder.Build());
-
- ServiceStateURLRequestDelegate fetcher_delegate;
- GURL url(kClientLoginUrl);
-
- std::string post_body;
- post_body += "accountType=GOOGLE";
- post_body += "&Email=" + net::EscapeUrlEncodedData(email, true);
- post_body += "&Passwd=" + net::EscapeUrlEncodedData(password, true);
- post_body += "&source=" + net::EscapeUrlEncodedData("CP-Service", true);
- post_body += "&service=" + net::EscapeUrlEncodedData(service, true);
-
- net::URLRequest request(url, &fetcher_delegate);
-
- request.AppendBytesToUpload(post_body.c_str(), post_body.size());
- request.SetExtraRequestHeaderByName(
- "Content-Type", "application/x-www-form-urlencoded", true);
- request.set_context(context.get());
- request.set_method("POST");
- request.Start();
-
- MessageLoop::current()->PostDelayedTask(
- FROM_HERE, MessageLoop::QuitClosure(), kRequestTimeoutMs);
-
- MessageLoop::current()->Run();
-
- const char kAuthStart[] = "Auth=";
- std::vector<std::string> lines;
- Tokenize(fetcher_delegate.data(), "\r\n", &lines);
- for (size_t i = 0; i < lines.size(); ++i) {
- std::vector<std::string> tokens;
- if (StartsWithASCII(lines[i], kAuthStart, false))
- return lines[i].substr(arraysize(kAuthStart) - 1);
- }
-
- return std::string();
-}
-
-bool ServiceState::Configure(const std::string& email,
- const std::string& password,
- const std::string& proxy_id) {
- robot_token_.clear();
- robot_email_.clear();
- email_ = email;
- proxy_id_ = proxy_id;
- auth_token_ = LoginToGoogle("cloudprint", email_, password);
- xmpp_auth_token_ = LoginToGoogle("chromiumsync", email_, password);
- return IsValid();
-}
-
« no previous file with comments | « cloud_print/service/win/service_state.h ('k') | cloud_print/service/win/service_state_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698