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

Side by Side Diff: chrome/browser/extensions/api/gcd_private/privet_v3_session.cc

Issue 1441403005: Use shared shared URLRequestContextGetter for all gcd_private sessions (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@context5
Patch Set: Created 5 years, 1 month 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
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 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/extensions/api/gcd_private/privet_v3_session.h" 5 #include "chrome/browser/extensions/api/gcd_private/privet_v3_session.h"
6 6
7 #include "base/base64.h" 7 #include "base/base64.h"
8 #include "base/json/json_writer.h" 8 #include "base/json/json_writer.h"
9 #include "base/location.h" 9 #include "base/location.h"
10 #include "base/logging.h" 10 #include "base/logging.h"
11 #include "base/single_thread_task_runner.h" 11 #include "base/single_thread_task_runner.h"
12 #include "base/thread_task_runner_handle.h" 12 #include "base/thread_task_runner_handle.h"
13 #include "chrome/browser/extensions/api/gcd_private/privet_v3_context_getter.h"
13 #include "chrome/browser/local_discovery/privet_constants.h" 14 #include "chrome/browser/local_discovery/privet_constants.h"
14 #include "chrome/browser/local_discovery/privet_http.h" 15 #include "chrome/browser/local_discovery/privet_http.h"
15 #include "chrome/browser/local_discovery/privet_http_impl.h" 16 #include "chrome/browser/local_discovery/privet_http_impl.h"
16 #include "chrome/browser/local_discovery/privet_url_fetcher.h" 17 #include "chrome/browser/local_discovery/privet_url_fetcher.h"
17 #include "chrome/common/cloud_print/cloud_print_constants.h" 18 #include "chrome/common/cloud_print/cloud_print_constants.h"
18 #include "crypto/hmac.h" 19 #include "crypto/hmac.h"
19 #include "crypto/p224_spake.h" 20 #include "crypto/p224_spake.h"
20 #include "url/gurl.h" 21 #include "url/gurl.h"
21 22
22 using local_discovery::PrivetURLFetcher; 23 using local_discovery::PrivetURLFetcher;
(...skipping 179 matching lines...) Expand 10 before | Expand all | Expand 10 after
202 url_fetcher_.reset(); 203 url_fetcher_.reset();
203 } 204 }
204 205
205 void PrivetV3Session::FetcherDelegate::OnTimeout() { 206 void PrivetV3Session::FetcherDelegate::OnTimeout() {
206 LOG(ERROR) << "PrivetURLFetcher timeout, url: " << url_fetcher_->url(); 207 LOG(ERROR) << "PrivetURLFetcher timeout, url: " << url_fetcher_->url();
207 ReplyAndDestroyItself(Result::STATUS_CONNECTIONERROR, 208 ReplyAndDestroyItself(Result::STATUS_CONNECTIONERROR,
208 base::DictionaryValue()); 209 base::DictionaryValue());
209 } 210 }
210 211
211 PrivetV3Session::PrivetV3Session( 212 PrivetV3Session::PrivetV3Session(
212 const scoped_refptr<net::URLRequestContextGetter>& context_getter, 213 const scoped_refptr<PrivetV3ContextGetter>& context_getter,
213 const net::HostPortPair& host_port) 214 const net::HostPortPair& host_port)
214 : client_(new local_discovery::PrivetHTTPClientImpl("", 215 : client_(new local_discovery::PrivetHTTPClientImpl("",
215 host_port, 216 host_port,
216 context_getter)), 217 context_getter)),
217 weak_ptr_factory_(this) {} 218 context_getter_(context_getter),
219 weak_ptr_factory_(this) {
220 CHECK(context_getter_);
221 }
218 222
219 PrivetV3Session::~PrivetV3Session() { 223 PrivetV3Session::~PrivetV3Session() {
220 Cancel(); 224 Cancel();
221 } 225 }
222 226
223 void PrivetV3Session::Init(const InitCallback& callback) { 227 void PrivetV3Session::Init(const InitCallback& callback) {
224 DCHECK(fetchers_.empty()); 228 DCHECK(fetchers_.empty());
225 DCHECK(!client_->IsInHttpsMode()); 229 DCHECK(!client_->IsInHttpsMode());
226 DCHECK(session_id_.empty()); 230 DCHECK(session_id_.empty());
227 DCHECK(privet_auth_token_.empty()); 231 DCHECK(privet_auth_token_.empty());
(...skipping 132 matching lines...) Expand 10 before | Expand all | Expand 10 after
360 } 364 }
361 365
362 std::string auth_code(hmac.DigestLength(), ' '); 366 std::string auth_code(hmac.DigestLength(), ' ');
363 if (!hmac.Sign(session_id_, 367 if (!hmac.Sign(session_id_,
364 reinterpret_cast<unsigned char*>(string_as_array(&auth_code)), 368 reinterpret_cast<unsigned char*>(string_as_array(&auth_code)),
365 auth_code.size())) { 369 auth_code.size())) {
366 LOG(FATAL) << "Signing failed"; 370 LOG(FATAL) << "Signing failed";
367 return callback.Run(Result::STATUS_SESSIONERROR); 371 return callback.Run(Result::STATUS_SESSIONERROR);
368 } 372 }
369 373
370 // From now use only https with fixed certificate.
371 VLOG(1) << "Expected certificate: " << fingerprint; 374 VLOG(1) << "Expected certificate: " << fingerprint;
372 client_->SwitchToHttps(https_port_, hash); 375 context_getter_->AddPairedHost(
376 client_->GetHost(), hash,
377 base::Bind(&PrivetV3Session::OnPairedHostAddedToContext,
378 weak_ptr_factory_.GetWeakPtr(), auth_code, callback));
379 }
380
381 void PrivetV3Session::OnPairedHostAddedToContext(
382 const std::string& auth_code,
383 const ResultCallback& callback) {
384 // Now use https with fixed certificate.
385 client_->SwitchToHttps(https_port_);
373 386
374 std::string auth_code_base64; 387 std::string auth_code_base64;
375 base::Base64Encode(auth_code, &auth_code_base64); 388 base::Base64Encode(auth_code, &auth_code_base64);
376 389
377 base::DictionaryValue input; 390 base::DictionaryValue input;
378 input.SetString(kPrivetV3KeyAuthCode, auth_code_base64); 391 input.SetString(kPrivetV3KeyAuthCode, auth_code_base64);
379 input.SetString(kPrivetV3KeyMode, kPrivetV3KeyPairing); 392 input.SetString(kPrivetV3KeyMode, kPrivetV3KeyPairing);
380 input.SetString(kPrivetV3KeyRequestedScope, kPrivetV3Auto); 393 input.SetString(kPrivetV3KeyRequestedScope, kPrivetV3Auto);
381 394
382 // Now we can use SendMessage with certificate validation. 395 // Now we can use SendMessage with certificate validation.
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after
462 void PrivetV3Session::Cancel() { 475 void PrivetV3Session::Cancel() {
463 // Cancel started unconfirmed sessions. 476 // Cancel started unconfirmed sessions.
464 if (session_id_.empty() || client_->IsInHttpsMode()) 477 if (session_id_.empty() || client_->IsInHttpsMode())
465 return; 478 return;
466 base::DictionaryValue input; 479 base::DictionaryValue input;
467 input.SetString(kPrivetV3KeySessionId, session_id_); 480 input.SetString(kPrivetV3KeySessionId, session_id_);
468 StartPostRequest(kPrivetV3PairingCancelPath, input, MessageCallback()); 481 StartPostRequest(kPrivetV3PairingCancelPath, input, MessageCallback());
469 } 482 }
470 483
471 } // namespace extensions 484 } // namespace extensions
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698