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

Side by Side Diff: chrome/browser/sync/internal_api/syncapi_server_connection_manager.cc

Issue 7841013: sync: take 2 at aborting active HTTP requests. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: initial Created 9 years, 3 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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 "chrome/browser/sync/internal_api/syncapi_server_connection_manager.h" 5 #include "chrome/browser/sync/internal_api/syncapi_server_connection_manager.h"
6 6
7 #include "chrome/browser/sync/internal_api/http_post_provider_factory.h" 7 #include "chrome/browser/sync/internal_api/http_post_provider_factory.h"
8 #include "chrome/browser/sync/internal_api/http_post_provider_interface.h" 8 #include "chrome/browser/sync/internal_api/http_post_provider_interface.h"
9 #include "chrome/browser/sync/util/oauth.h" 9 #include "chrome/browser/sync/util/oauth.h"
10 #include "chrome/common/net/http_return.h" 10 #include "chrome/common/net/http_return.h"
11 #include "net/base/net_errors.h"
11 12
12 using browser_sync::HttpResponse; 13 using browser_sync::HttpResponse;
13 14
14 namespace sync_api { 15 namespace sync_api {
15 16
16 SyncAPIBridgedPost::SyncAPIBridgedPost( 17 SyncAPIBridgedConnection::SyncAPIBridgedConnection(
17 browser_sync::ServerConnectionManager* scm, 18 browser_sync::ServerConnectionManager* scm,
18 HttpPostProviderFactory* factory) 19 HttpPostProviderFactory* factory)
19 : Post(scm), factory_(factory) { 20 : Connection(scm), factory_(factory) {
21 post_provider_ = factory_->Create();
20 } 22 }
21 23
22 SyncAPIBridgedPost::~SyncAPIBridgedPost() {} 24 SyncAPIBridgedConnection::~SyncAPIBridgedConnection() {
25 DCHECK(post_provider_);
26 factory_->Destroy(post_provider_);
27 post_provider_ = NULL;
28 }
23 29
24 bool SyncAPIBridgedPost::Init(const char* path, 30 bool SyncAPIBridgedConnection::Init(const char* path,
25 const std::string& auth_token, 31 const std::string& auth_token,
26 const std::string& payload, 32 const std::string& payload,
27 HttpResponse* response) { 33 HttpResponse* response) {
28 std::string sync_server; 34 std::string sync_server;
29 int sync_server_port = 0; 35 int sync_server_port = 0;
30 bool use_ssl = false; 36 bool use_ssl = false;
31 GetServerParams(&sync_server, &sync_server_port, &use_ssl); 37 GetServerParams(&sync_server, &sync_server_port, &use_ssl);
32 std::string connection_url = MakeConnectionURL(sync_server, path, use_ssl); 38 std::string connection_url = MakeConnectionURL(sync_server, path, use_ssl);
33 39
34 HttpPostProviderInterface* http = factory_->Create(); 40 HttpPostProviderInterface* http = post_provider_;
35 http->SetUserAgent(scm_->user_agent().c_str()); 41 http->SetUserAgent(scm_->user_agent().c_str());
36 http->SetURL(connection_url.c_str(), sync_server_port); 42 http->SetURL(connection_url.c_str(), sync_server_port);
37 43
38 if (!auth_token.empty()) { 44 if (!auth_token.empty()) {
39 std::string headers; 45 std::string headers;
40 if (browser_sync::IsUsingOAuth()) { 46 if (browser_sync::IsUsingOAuth()) {
41 headers = "Authorization: OAuth " + auth_token; 47 headers = "Authorization: OAuth " + auth_token;
42 } else { 48 } else {
43 headers = "Authorization: GoogleLogin auth=" + auth_token; 49 headers = "Authorization: GoogleLogin auth=" + auth_token;
44 } 50 }
45 http->SetExtraRequestHeaders(headers.c_str()); 51 http->SetExtraRequestHeaders(headers.c_str());
46 } 52 }
47 53
48 // Must be octet-stream, or the payload may be parsed for a cookie. 54 // Must be octet-stream, or the payload may be parsed for a cookie.
49 http->SetPostPayload("application/octet-stream", payload.length(), 55 http->SetPostPayload("application/octet-stream", payload.length(),
50 payload.data()); 56 payload.data());
51 57
52 // Issue the POST, blocking until it finishes. 58 // Issue the POST, blocking until it finishes.
53 int os_error_code = 0; 59 int os_error_code = 0;
54 int response_code = 0; 60 int response_code = 0;
55 if (!http->MakeSynchronousPost(&os_error_code, &response_code)) { 61 if (!http->MakeSynchronousPost(&os_error_code, &response_code)) {
56 VLOG(1) << "Http POST failed, error returns: " << os_error_code; 62 VLOG(1) << "Http POST failed, error returns: " << os_error_code;
57 response->server_status = HttpResponse::IO_ERROR; 63 response->server_status = os_error_code == net::ERR_ABORTED ?
58 factory_->Destroy(http); 64 HttpResponse::CONNECTION_UNAVAILABLE : HttpResponse::IO_ERROR;
59 return false; 65 return false;
60 } 66 }
61 67
62 // We got a server response, copy over response codes and content. 68 // We got a server response, copy over response codes and content.
63 response->response_code = response_code; 69 response->response_code = response_code;
64 response->content_length = 70 response->content_length =
65 static_cast<int64>(http->GetResponseContentLength()); 71 static_cast<int64>(http->GetResponseContentLength());
66 response->payload_length = 72 response->payload_length =
67 static_cast<int64>(http->GetResponseContentLength()); 73 static_cast<int64>(http->GetResponseContentLength());
68 if (response->response_code < 400) 74 if (response->response_code < 400)
69 response->server_status = HttpResponse::SERVER_CONNECTION_OK; 75 response->server_status = HttpResponse::SERVER_CONNECTION_OK;
70 else if (response->response_code == RC_UNAUTHORIZED) 76 else if (response->response_code == RC_UNAUTHORIZED)
71 response->server_status = HttpResponse::SYNC_AUTH_ERROR; 77 response->server_status = HttpResponse::SYNC_AUTH_ERROR;
72 else 78 else
73 response->server_status = HttpResponse::SYNC_SERVER_ERROR; 79 response->server_status = HttpResponse::SYNC_SERVER_ERROR;
74 80
75 response->update_client_auth_header = 81 response->update_client_auth_header =
76 http->GetResponseHeaderValue("Update-Client-Auth"); 82 http->GetResponseHeaderValue("Update-Client-Auth");
77 83
78 // Write the content into our buffer. 84 // Write the content into our buffer.
79 buffer_.assign(http->GetResponseContent(), http->GetResponseContentLength()); 85 buffer_.assign(http->GetResponseContent(), http->GetResponseContentLength());
86 return true;
87 }
80 88
81 // We're done with the HttpPostProvider. 89 void SyncAPIBridgedConnection::Abort() {
82 factory_->Destroy(http); 90 DCHECK(post_provider_);
83 return true; 91 post_provider_->Abort();
84 } 92 }
85 93
86 SyncAPIServerConnectionManager::SyncAPIServerConnectionManager( 94 SyncAPIServerConnectionManager::SyncAPIServerConnectionManager(
87 const std::string& server, 95 const std::string& server,
88 int port, 96 int port,
89 bool use_ssl, 97 bool use_ssl,
90 const std::string& client_version, 98 const std::string& client_version,
91 HttpPostProviderFactory* factory) 99 HttpPostProviderFactory* factory)
92 : ServerConnectionManager(server, port, use_ssl, client_version), 100 : ServerConnectionManager(server, port, use_ssl, client_version),
93 post_provider_factory_(factory) { 101 post_provider_factory_(factory) {
94 DCHECK(post_provider_factory_.get()); 102 DCHECK(post_provider_factory_.get());
95 } 103 }
96 104
97 SyncAPIServerConnectionManager::~SyncAPIServerConnectionManager() {} 105 SyncAPIServerConnectionManager::~SyncAPIServerConnectionManager() {}
98 106
99 browser_sync::ServerConnectionManager::Post* 107 browser_sync::ServerConnectionManager::Connection*
100 SyncAPIServerConnectionManager::MakePost() { 108 SyncAPIServerConnectionManager::MakeConnection() {
101 return new SyncAPIBridgedPost(this, post_provider_factory_.get()); 109 return new SyncAPIBridgedConnection(this, post_provider_factory_.get());
102 } 110 }
103 111
104 } // namespace sync_api 112 } // namespace sync_api
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698