OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 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/history/web_history_service.h" | 5 #include "chrome/browser/history/web_history_service.h" |
6 | 6 |
7 #include "base/bind.h" | 7 #include "base/bind.h" |
8 #include "base/json/json_reader.h" | 8 #include "base/json/json_reader.h" |
9 #include "base/json/json_writer.h" | 9 #include "base/json/json_writer.h" |
10 #include "base/metrics/histogram.h" | 10 #include "base/metrics/histogram.h" |
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
42 | 42 |
43 const char kPostDataMimeType[] = "text/plain"; | 43 const char kPostDataMimeType[] = "text/plain"; |
44 | 44 |
45 // The maximum number of retries for the URLFetcher requests. | 45 // The maximum number of retries for the URLFetcher requests. |
46 const size_t kMaxRetries = 1; | 46 const size_t kMaxRetries = 1; |
47 | 47 |
48 class RequestImpl : public WebHistoryService::Request, | 48 class RequestImpl : public WebHistoryService::Request, |
49 private OAuth2TokenService::Consumer, | 49 private OAuth2TokenService::Consumer, |
50 private net::URLFetcherDelegate { | 50 private net::URLFetcherDelegate { |
51 public: | 51 public: |
52 virtual ~RequestImpl() { | 52 ~RequestImpl() override {} |
53 } | |
54 | 53 |
55 // Returns the response code received from the server, which will only be | 54 // Returns the response code received from the server, which will only be |
56 // valid if the request succeeded. | 55 // valid if the request succeeded. |
57 int response_code() { return response_code_; } | 56 int response_code() { return response_code_; } |
58 | 57 |
59 // Returns the contents of the response body received from the server. | 58 // Returns the contents of the response body received from the server. |
60 const std::string& response_body() { return response_body_; } | 59 const std::string& response_body() { return response_body_; } |
61 | 60 |
62 virtual bool is_pending() override { return is_pending_; } | 61 bool is_pending() override { return is_pending_; } |
63 | 62 |
64 private: | 63 private: |
65 friend class history::WebHistoryService; | 64 friend class history::WebHistoryService; |
66 | 65 |
67 typedef base::Callback<void(Request*, bool)> CompletionCallback; | 66 typedef base::Callback<void(Request*, bool)> CompletionCallback; |
68 | 67 |
69 RequestImpl(Profile* profile, | 68 RequestImpl(Profile* profile, |
70 const GURL& url, | 69 const GURL& url, |
71 const CompletionCallback& callback) | 70 const CompletionCallback& callback) |
72 : OAuth2TokenService::Consumer("web_history"), | 71 : OAuth2TokenService::Consumer("web_history"), |
(...skipping 13 matching lines...) Expand all Loading... |
86 ProfileOAuth2TokenService* token_service = | 85 ProfileOAuth2TokenService* token_service = |
87 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); | 86 ProfileOAuth2TokenServiceFactory::GetForProfile(profile_); |
88 SigninManagerBase* signin_manager = | 87 SigninManagerBase* signin_manager = |
89 SigninManagerFactory::GetForProfile(profile_); | 88 SigninManagerFactory::GetForProfile(profile_); |
90 token_request_ = token_service->StartRequest( | 89 token_request_ = token_service->StartRequest( |
91 signin_manager->GetAuthenticatedAccountId(), oauth_scopes, this); | 90 signin_manager->GetAuthenticatedAccountId(), oauth_scopes, this); |
92 is_pending_ = true; | 91 is_pending_ = true; |
93 } | 92 } |
94 | 93 |
95 // content::URLFetcherDelegate interface. | 94 // content::URLFetcherDelegate interface. |
96 virtual void OnURLFetchComplete(const net::URLFetcher* source) override { | 95 void OnURLFetchComplete(const net::URLFetcher* source) override { |
97 DCHECK_EQ(source, url_fetcher_.get()); | 96 DCHECK_EQ(source, url_fetcher_.get()); |
98 response_code_ = url_fetcher_->GetResponseCode(); | 97 response_code_ = url_fetcher_->GetResponseCode(); |
99 | 98 |
100 UMA_HISTOGRAM_CUSTOM_ENUMERATION("WebHistory.OAuthTokenResponseCode", | 99 UMA_HISTOGRAM_CUSTOM_ENUMERATION("WebHistory.OAuthTokenResponseCode", |
101 net::HttpUtil::MapStatusCodeForHistogram(response_code_), | 100 net::HttpUtil::MapStatusCodeForHistogram(response_code_), |
102 net::HttpUtil::GetStatusCodesForHistogram()); | 101 net::HttpUtil::GetStatusCodesForHistogram()); |
103 | 102 |
104 // If the response code indicates that the token might not be valid, | 103 // If the response code indicates that the token might not be valid, |
105 // invalidate the token and try again. | 104 // invalidate the token and try again. |
106 if (response_code_ == net::HTTP_UNAUTHORIZED && ++auth_retry_count_ <= 1) { | 105 if (response_code_ == net::HTTP_UNAUTHORIZED && ++auth_retry_count_ <= 1) { |
(...skipping 14 matching lines...) Expand all Loading... |
121 } | 120 } |
122 url_fetcher_->GetResponseAsString(&response_body_); | 121 url_fetcher_->GetResponseAsString(&response_body_); |
123 url_fetcher_.reset(); | 122 url_fetcher_.reset(); |
124 is_pending_ = false; | 123 is_pending_ = false; |
125 callback_.Run(this, true); | 124 callback_.Run(this, true); |
126 // It is valid for the callback to delete |this|, so do not access any | 125 // It is valid for the callback to delete |this|, so do not access any |
127 // members below here. | 126 // members below here. |
128 } | 127 } |
129 | 128 |
130 // OAuth2TokenService::Consumer interface. | 129 // OAuth2TokenService::Consumer interface. |
131 virtual void OnGetTokenSuccess( | 130 void OnGetTokenSuccess(const OAuth2TokenService::Request* request, |
132 const OAuth2TokenService::Request* request, | 131 const std::string& access_token, |
133 const std::string& access_token, | 132 const base::Time& expiration_time) override { |
134 const base::Time& expiration_time) override { | |
135 token_request_.reset(); | 133 token_request_.reset(); |
136 DCHECK(!access_token.empty()); | 134 DCHECK(!access_token.empty()); |
137 access_token_ = access_token; | 135 access_token_ = access_token; |
138 | 136 |
139 UMA_HISTOGRAM_BOOLEAN("WebHistory.OAuthTokenCompletion", true); | 137 UMA_HISTOGRAM_BOOLEAN("WebHistory.OAuthTokenCompletion", true); |
140 | 138 |
141 // Got an access token -- start the actual API request. | 139 // Got an access token -- start the actual API request. |
142 url_fetcher_.reset(CreateUrlFetcher(access_token)); | 140 url_fetcher_.reset(CreateUrlFetcher(access_token)); |
143 url_fetcher_->Start(); | 141 url_fetcher_->Start(); |
144 } | 142 } |
145 | 143 |
146 virtual void OnGetTokenFailure( | 144 void OnGetTokenFailure(const OAuth2TokenService::Request* request, |
147 const OAuth2TokenService::Request* request, | 145 const GoogleServiceAuthError& error) override { |
148 const GoogleServiceAuthError& error) override { | |
149 token_request_.reset(); | 146 token_request_.reset(); |
150 is_pending_ = false; | 147 is_pending_ = false; |
151 | 148 |
152 UMA_HISTOGRAM_BOOLEAN("WebHistory.OAuthTokenCompletion", false); | 149 UMA_HISTOGRAM_BOOLEAN("WebHistory.OAuthTokenCompletion", false); |
153 | 150 |
154 callback_.Run(this, false); | 151 callback_.Run(this, false); |
155 // It is valid for the callback to delete |this|, so do not access any | 152 // It is valid for the callback to delete |this|, so do not access any |
156 // members below here. | 153 // members below here. |
157 } | 154 } |
158 | 155 |
(...skipping 247 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
406 if (response_value) | 403 if (response_value) |
407 response_value->GetString("version_info", &server_version_info_); | 404 response_value->GetString("version_info", &server_version_info_); |
408 } | 405 } |
409 callback.Run(response_value.get() && success); | 406 callback.Run(response_value.get() && success); |
410 // Clean up from pending requests. | 407 // Clean up from pending requests. |
411 pending_expire_requests_.erase(request); | 408 pending_expire_requests_.erase(request); |
412 delete request; | 409 delete request; |
413 } | 410 } |
414 | 411 |
415 } // namespace history | 412 } // namespace history |
OLD | NEW |