15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2014 The Chromium Authors. All rights reserved. 25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file. 45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/test/fake_server/fake_server_http_post_provider.h" 65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 75d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include <string> 85d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 9010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/bind.h" 10010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/location.h" 11010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/memory/ref_counted.h" 12010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/sequenced_task_runner.h" 13010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)#include "base/synchronization/waitable_event.h" 145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "sync/test/fake_server/fake_server.h" 155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 16a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)using syncer::HttpPostProviderInterface; 17a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles) 18a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)namespace fake_server { 195d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 205d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FakeServerHttpPostProviderFactory::FakeServerHttpPostProviderFactory( 21010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FakeServer* fake_server, 22010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> task_runner) 23010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : fake_server_(fake_server), task_runner_(task_runner) { } 245d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 255d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FakeServerHttpPostProviderFactory::~FakeServerHttpPostProviderFactory() { } 265d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 275d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FakeServerHttpPostProviderFactory::Init(const std::string& user_agent) { } 285d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 295d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)HttpPostProviderInterface* FakeServerHttpPostProviderFactory::Create() { 305d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) FakeServerHttpPostProvider* http = 31010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) new FakeServerHttpPostProvider(fake_server_, task_runner_); 325d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) http->AddRef(); 335d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return http; 345d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 355d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 365d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FakeServerHttpPostProviderFactory::Destroy( 375d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) HttpPostProviderInterface* http) { 385d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) static_cast<FakeServerHttpPostProvider*>(http)->Release(); 395d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 405d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 415d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FakeServerHttpPostProvider::FakeServerHttpPostProvider( 42010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FakeServer* fake_server, 43010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) scoped_refptr<base::SequencedTaskRunner> task_runner) 44010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) : fake_server_(fake_server), 45010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) task_runner_(task_runner), 46010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) post_complete_(false, false) { } 475d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 485d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)FakeServerHttpPostProvider::~FakeServerHttpPostProvider() { } 495d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 505d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FakeServerHttpPostProvider::SetExtraRequestHeaders(const char* headers) { 515d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(pvalenzuela): Add assertions on this value. 525d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) extra_request_headers_.assign(headers); 535d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FakeServerHttpPostProvider::SetURL(const char* url, int port) { 565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) // TODO(pvalenzuela): Add assertions on these values. 575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) request_url_.assign(url); 585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) request_port_ = port; 595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FakeServerHttpPostProvider::SetPostPayload(const char* content_type, 625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int content_length, 635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const char* content) { 645d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) request_content_type_.assign(content_type); 655d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) request_content_.assign(content, content_length); 665d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 675d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 68010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)void FakeServerHttpPostProvider::OnPostComplete(int error_code, 69010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) int response_code, 70010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) const std::string& response) { 71010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) post_error_code_ = error_code; 72010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) post_response_code_ = response_code; 73010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) response_ = response; 74010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) post_complete_.Signal(); 75010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles)} 76010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) 775d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)bool FakeServerHttpPostProvider::MakeSynchronousPost(int* error_code, 785d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) int* response_code) { 79010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) // It is assumed that a POST is being made to /command. 80010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) FakeServer::HandleCommandCallback callback = base::Bind( 81010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) &FakeServerHttpPostProvider::OnPostComplete, base::Unretained(this)); 82010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) task_runner_->PostNonNestableTask(FROM_HERE, 83010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::Bind(&FakeServer::HandleCommand, 84010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::Unretained(fake_server_), 85010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::ConstRef(request_content_), 86010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) base::ConstRef(callback))); 87010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) post_complete_.Wait(); 88010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *error_code = post_error_code_; 89010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) *response_code = post_response_code_; 90010d83a9304c5a91596085d917d248abff47903aTorne (Richard Coles) return *error_code == 0; 915d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 925d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 935d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)int FakeServerHttpPostProvider::GetResponseContentLength() const { 945d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return response_.length(); 955d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 965d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 975d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const char* FakeServerHttpPostProvider::GetResponseContent() const { 985d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return response_.c_str(); 995d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1005d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1015d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)const std::string FakeServerHttpPostProvider::GetResponseHeaderValue( 1025d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) const std::string& name) const { 1035d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) return std::string(); 1045d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1055d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 1065d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)void FakeServerHttpPostProvider::Abort() { 1075d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)} 1085d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles) 109a1401311d1ab56c4ed0a474bd38c108f75cb0cd9Torne (Richard Coles)} // namespace fake_server 110