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

Side by Side Diff: net/websockets/websocket_job.cc

Issue 188693003: Allow the content browser client to specify a special cookie store to be (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src/
Patch Set: Created 6 years, 9 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
« no previous file with comments | « net/url_request/url_request_job.cc ('k') | net/websockets/websocket_job_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 "net/websockets/websocket_job.h" 5 #include "net/websockets/websocket_job.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 8
9 #include "base/bind.h" 9 #include "base/bind.h"
10 #include "base/lazy_instance.h" 10 #include "base/lazy_instance.h"
(...skipping 18 matching lines...) Expand all
29 29
30 // lower-case header names. 30 // lower-case header names.
31 const char* const kCookieHeaders[] = { 31 const char* const kCookieHeaders[] = {
32 "cookie", "cookie2" 32 "cookie", "cookie2"
33 }; 33 };
34 const char* const kSetCookieHeaders[] = { 34 const char* const kSetCookieHeaders[] = {
35 "set-cookie", "set-cookie2" 35 "set-cookie", "set-cookie2"
36 }; 36 };
37 37
38 net::SocketStreamJob* WebSocketJobFactory( 38 net::SocketStreamJob* WebSocketJobFactory(
39 const GURL& url, net::SocketStream::Delegate* delegate) { 39 const GURL& url, net::SocketStream::Delegate* delegate,
40 net::URLRequestContext* context, net::CookieStore* cookie_store) {
40 net::WebSocketJob* job = new net::WebSocketJob(delegate); 41 net::WebSocketJob* job = new net::WebSocketJob(delegate);
41 job->InitSocketStream(new net::SocketStream(url, job)); 42 job->InitSocketStream(new net::SocketStream(url, job, context, cookie_store));
42 return job; 43 return job;
43 } 44 }
44 45
45 class WebSocketJobInitSingleton { 46 class WebSocketJobInitSingleton {
46 private: 47 private:
47 friend struct base::DefaultLazyInstanceTraits<WebSocketJobInitSingleton>; 48 friend struct base::DefaultLazyInstanceTraits<WebSocketJobInitSingleton>;
48 WebSocketJobInitSingleton() { 49 WebSocketJobInitSingleton() {
49 net::SocketStreamJob::RegisterProtocolFactory("ws", WebSocketJobFactory); 50 net::SocketStreamJob::RegisterProtocolFactory("ws", WebSocketJobFactory);
50 net::SocketStreamJob::RegisterProtocolFactory("wss", WebSocketJobFactory); 51 net::SocketStreamJob::RegisterProtocolFactory("wss", WebSocketJobFactory);
51 } 52 }
(...skipping 311 matching lines...) Expand 10 before | Expand all | Expand 10 after
363 } 364 }
364 365
365 void WebSocketJob::AddCookieHeaderAndSend() { 366 void WebSocketJob::AddCookieHeaderAndSend() {
366 bool allow = true; 367 bool allow = true;
367 if (delegate_ && !delegate_->CanGetCookies(socket_.get(), GetURLForCookies())) 368 if (delegate_ && !delegate_->CanGetCookies(socket_.get(), GetURLForCookies()))
368 allow = false; 369 allow = false;
369 370
370 if (socket_.get() && delegate_ && state_ == CONNECTING) { 371 if (socket_.get() && delegate_ && state_ == CONNECTING) {
371 handshake_request_->RemoveHeaders(kCookieHeaders, 372 handshake_request_->RemoveHeaders(kCookieHeaders,
372 arraysize(kCookieHeaders)); 373 arraysize(kCookieHeaders));
373 if (allow && socket_->context()->cookie_store()) { 374 if (allow && socket_->cookie_store()) {
374 // Add cookies, including HttpOnly cookies. 375 // Add cookies, including HttpOnly cookies.
375 CookieOptions cookie_options; 376 CookieOptions cookie_options;
376 cookie_options.set_include_httponly(); 377 cookie_options.set_include_httponly();
377 socket_->context()->cookie_store()->GetCookiesWithOptionsAsync( 378 socket_->cookie_store()->GetCookiesWithOptionsAsync(
378 GetURLForCookies(), cookie_options, 379 GetURLForCookies(), cookie_options,
379 base::Bind(&WebSocketJob::LoadCookieCallback, 380 base::Bind(&WebSocketJob::LoadCookieCallback,
380 weak_ptr_factory_.GetWeakPtr())); 381 weak_ptr_factory_.GetWeakPtr()));
381 } else { 382 } else {
382 DoSendData(); 383 DoSendData();
383 } 384 }
384 } 385 }
385 } 386 }
386 387
387 void WebSocketJob::LoadCookieCallback(const std::string& cookie) { 388 void WebSocketJob::LoadCookieCallback(const std::string& cookie) {
(...skipping 110 matching lines...) Expand 10 before | Expand all | Expand 10 after
498 WebSocketThrottle::GetInstance()->RemoveFromQueue(this); 499 WebSocketThrottle::GetInstance()->RemoveFromQueue(this);
499 } 500 }
500 501
501 void WebSocketJob::SaveNextCookie() { 502 void WebSocketJob::SaveNextCookie() {
502 if (!socket_.get() || !delegate_ || state_ != CONNECTING) 503 if (!socket_.get() || !delegate_ || state_ != CONNECTING)
503 return; 504 return;
504 505
505 callback_pending_ = false; 506 callback_pending_ = false;
506 save_next_cookie_running_ = true; 507 save_next_cookie_running_ = true;
507 508
508 if (socket_->context()->cookie_store()) { 509 if (socket_->cookie_store()) {
509 GURL url_for_cookies = GetURLForCookies(); 510 GURL url_for_cookies = GetURLForCookies();
510 511
511 CookieOptions options; 512 CookieOptions options;
512 options.set_include_httponly(); 513 options.set_include_httponly();
513 514
514 // Loop as long as SetCookieWithOptionsAsync completes synchronously. Since 515 // Loop as long as SetCookieWithOptionsAsync completes synchronously. Since
515 // CookieMonster's asynchronous operation APIs queue the callback to run it 516 // CookieMonster's asynchronous operation APIs queue the callback to run it
516 // on the thread where the API was called, there won't be race. I.e. unless 517 // on the thread where the API was called, there won't be race. I.e. unless
517 // the callback is run synchronously, it won't be run in parallel with this 518 // the callback is run synchronously, it won't be run in parallel with this
518 // method. 519 // method.
519 while (!callback_pending_ && 520 while (!callback_pending_ &&
520 response_cookies_save_index_ < response_cookies_.size()) { 521 response_cookies_save_index_ < response_cookies_.size()) {
521 std::string cookie = response_cookies_[response_cookies_save_index_]; 522 std::string cookie = response_cookies_[response_cookies_save_index_];
522 response_cookies_save_index_++; 523 response_cookies_save_index_++;
523 524
524 if (!delegate_->CanSetCookie( 525 if (!delegate_->CanSetCookie(
525 socket_.get(), url_for_cookies, cookie, &options)) 526 socket_.get(), url_for_cookies, cookie, &options))
526 continue; 527 continue;
527 528
528 callback_pending_ = true; 529 callback_pending_ = true;
529 socket_->context()->cookie_store()->SetCookieWithOptionsAsync( 530 socket_->cookie_store()->SetCookieWithOptionsAsync(
530 url_for_cookies, cookie, options, 531 url_for_cookies, cookie, options,
531 base::Bind(&WebSocketJob::OnCookieSaved, 532 base::Bind(&WebSocketJob::OnCookieSaved,
532 weak_ptr_factory_.GetWeakPtr())); 533 weak_ptr_factory_.GetWeakPtr()));
533 } 534 }
534 } 535 }
535 536
536 save_next_cookie_running_ = false; 537 save_next_cookie_running_ = false;
537 538
538 if (callback_pending_) 539 if (callback_pending_)
539 return; 540 return;
(...skipping 152 matching lines...) Expand 10 before | Expand all | Expand 10 after
692 693
693 scoped_refptr<IOBufferWithSize> next_buffer = send_buffer_queue_.front(); 694 scoped_refptr<IOBufferWithSize> next_buffer = send_buffer_queue_.front();
694 send_buffer_queue_.pop_front(); 695 send_buffer_queue_.pop_front();
695 current_send_buffer_ = 696 current_send_buffer_ =
696 new DrainableIOBuffer(next_buffer.get(), next_buffer->size()); 697 new DrainableIOBuffer(next_buffer.get(), next_buffer->size());
697 SendDataInternal(current_send_buffer_->data(), 698 SendDataInternal(current_send_buffer_->data(),
698 current_send_buffer_->BytesRemaining()); 699 current_send_buffer_->BytesRemaining());
699 } 700 }
700 701
701 } // namespace net 702 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_request_job.cc ('k') | net/websockets/websocket_job_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698