diff options
author | tommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-07 02:35:04 +0000 |
---|---|---|
committer | tommi@chromium.org <tommi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2009-11-07 02:35:04 +0000 |
commit | fc6fb7fbf9aca6b58f8c99a08a6c376b95bbc1a3 (patch) | |
tree | ca9186ed7ddbeb19604b495430d9c9814df57471 /chrome/browser/automation | |
parent | cfc076ec466fc48e91c309448c4e5be3467b42c7 (diff) | |
download | chromium_src-fc6fb7fbf9aca6b58f8c99a08a6c376b95bbc1a3.zip chromium_src-fc6fb7fbf9aca6b58f8c99a08a6c376b95bbc1a3.tar.gz chromium_src-fc6fb7fbf9aca6b58f8c99a08a6c376b95bbc1a3.tar.bz2 |
Basic wiring to enable downloads for CF's host browser network stack. A notable change here is that url automation job id's no longer exist and instead a request id is used. There's a 1 to 1 relation between a job and a request so this is more convenient.
Review URL: http://codereview.chromium.org/355036
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@31363 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'chrome/browser/automation')
4 files changed, 22 insertions, 32 deletions
diff --git a/chrome/browser/automation/automation_resource_message_filter.cc b/chrome/browser/automation/automation_resource_message_filter.cc index 953061e..e0512ca 100644 --- a/chrome/browser/automation/automation_resource_message_filter.cc +++ b/chrome/browser/automation/automation_resource_message_filter.cc @@ -20,7 +20,6 @@ AutomationResourceMessageFilter::RenderViewMap AutomationResourceMessageFilter::filtered_render_views_; -int AutomationResourceMessageFilter::unique_request_id_ = 1; AutomationResourceMessageFilter::AutomationResourceMessageFilter() : channel_(NULL) { @@ -64,8 +63,8 @@ void AutomationResourceMessageFilter::OnChannelClosing() { // Called on the IPC thread: bool AutomationResourceMessageFilter::OnMessageReceived( const IPC::Message& message) { - int request_id = URLRequestAutomationJob::MayFilterMessage(message); - if (request_id) { + int request_id; + if (URLRequestAutomationJob::MayFilterMessage(message, &request_id)) { RequestMap::iterator it = request_map_.find(request_id); if (it != request_map_.end()) { URLRequestAutomationJob* job = it->second; diff --git a/chrome/browser/automation/automation_resource_message_filter.h b/chrome/browser/automation/automation_resource_message_filter.h index beb5fa8..ceb6115 100644 --- a/chrome/browser/automation/automation_resource_message_filter.h +++ b/chrome/browser/automation/automation_resource_message_filter.h @@ -39,10 +39,6 @@ class AutomationResourceMessageFilter AutomationResourceMessageFilter(); virtual ~AutomationResourceMessageFilter(); - int NewRequestId() { - return base::subtle::Barrier_AtomicIncrement(&unique_request_id_, 1); - } - // IPC::ChannelProxy::MessageFilter methods: virtual void OnFilterAdded(IPC::Channel* channel); virtual void OnChannelConnected(int32 peer_pid); @@ -98,9 +94,6 @@ class AutomationResourceMessageFilter // owned by this class. IPC::Channel* channel_; - // A unique request id per process. - static int unique_request_id_; - // Map of outstanding requests. RequestMap request_map_; diff --git a/chrome/browser/automation/url_request_automation_job.cc b/chrome/browser/automation/url_request_automation_job.cc index 715e292..ead7aab 100644 --- a/chrome/browser/automation/url_request_automation_job.cc +++ b/chrome/browser/automation/url_request_automation_job.cc @@ -49,17 +49,16 @@ URLRequest::ProtocolFactory* URLRequestAutomationJob::old_http_factory_ URLRequest::ProtocolFactory* URLRequestAutomationJob::old_https_factory_ = NULL; -URLRequestAutomationJob::URLRequestAutomationJob( - URLRequest* request, int tab, AutomationResourceMessageFilter* filter) - : URLRequestJob(request), id_(0), tab_(tab), message_filter_(filter), - pending_buf_size_(0), redirect_status_(0) { +URLRequestAutomationJob::URLRequestAutomationJob(URLRequest* request, int tab, + int request_id, AutomationResourceMessageFilter* filter) + : URLRequestJob(request), + id_(request_id), + tab_(tab), + message_filter_(filter), + pending_buf_size_(0), + redirect_status_(0) { DLOG(INFO) << "URLRequestAutomationJob create. Count: " << ++instance_count_; - if (message_filter_) { - id_ = message_filter_->NewRequestId(); - DCHECK(id_); - } else { - NOTREACHED(); - } + DCHECK_NE(id_, -1); } URLRequestAutomationJob::~URLRequestAutomationJob() { @@ -97,7 +96,7 @@ URLRequestJob* URLRequestAutomationJob::Factory(URLRequest* request, if (AutomationResourceMessageFilter::LookupRegisteredRenderView( request_info->child_id(), request_info->route_id(), &details)) { URLRequestAutomationJob* job = new URLRequestAutomationJob(request, - details.tab_handle, details.filter); + details.tab_handle, request_info->request_id(), details.filter); return job; } } @@ -202,23 +201,22 @@ bool URLRequestAutomationJob::IsRedirectResponse( return false; } -int URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message) { +bool URLRequestAutomationJob::MayFilterMessage(const IPC::Message& message, + int* request_id) { switch (message.type()) { case AutomationMsg_RequestStarted::ID: case AutomationMsg_RequestData::ID: case AutomationMsg_RequestEnd::ID: { void* iter = NULL; int tab = 0; - int id = 0; - if (message.ReadInt(&iter, &tab) && message.ReadInt(&iter, &id)) { - DCHECK(id); - return id; + if (message.ReadInt(&iter, &tab) && message.ReadInt(&iter, request_id)) { + return true; } break; } } - return 0; + return false; } void URLRequestAutomationJob::OnMessage(const IPC::Message& message) { @@ -229,8 +227,8 @@ void URLRequestAutomationJob::OnMessage(const IPC::Message& message) { IPC_END_MESSAGE_MAP() } -void URLRequestAutomationJob::OnRequestStarted( - int tab, int id, const IPC::AutomationURLResponse& response) { +void URLRequestAutomationJob::OnRequestStarted(int tab, int id, + const IPC::AutomationURLResponse& response) { DLOG(INFO) << "URLRequestAutomationJob: " << request_->url().spec() << " - response started."; set_expected_content_size(response.content_length); diff --git a/chrome/browser/automation/url_request_automation_job.h b/chrome/browser/automation/url_request_automation_job.h index d4ed0f0..0edd876 100644 --- a/chrome/browser/automation/url_request_automation_job.h +++ b/chrome/browser/automation/url_request_automation_job.h @@ -22,8 +22,8 @@ struct AutomationURLResponse; // automation. class URLRequestAutomationJob : public URLRequestJob { public: - URLRequestAutomationJob( - URLRequest* request, int tab, AutomationResourceMessageFilter* filter); + URLRequestAutomationJob(URLRequest* request, int tab, int request_id, + AutomationResourceMessageFilter* filter); // Register our factory for HTTP/HTTPs requests. static bool EnsureProtocolFactoryRegistered(); @@ -40,7 +40,7 @@ class URLRequestAutomationJob : public URLRequestJob { virtual bool IsRedirectResponse(GURL* location, int* http_status_code); // Peek and process automation messages for URL requests. - static int MayFilterMessage(const IPC::Message& message); + static bool MayFilterMessage(const IPC::Message& message, int* request_id); void OnMessage(const IPC::Message& message); int id() const { |