summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--chrome/browser/automation/automation_resource_message_filter.cc28
-rw-r--r--chrome/browser/automation/automation_resource_message_filter.h2
-rw-r--r--chrome/browser/renderer_host/audio_renderer_host.cc63
-rw-r--r--chrome/browser/renderer_host/audio_renderer_host.h7
-rw-r--r--chrome/browser/renderer_host/audio_renderer_host_unittest.cc15
-rw-r--r--chrome/browser/renderer_host/browser_render_process_host.cc3
6 files changed, 56 insertions, 62 deletions
diff --git a/chrome/browser/automation/automation_resource_message_filter.cc b/chrome/browser/automation/automation_resource_message_filter.cc
index c06eb66..eb3edf3 100644
--- a/chrome/browser/automation/automation_resource_message_filter.cc
+++ b/chrome/browser/automation/automation_resource_message_filter.cc
@@ -5,7 +5,6 @@
#include "chrome/browser/automation/automation_resource_message_filter.h"
#include "base/histogram.h"
-#include "base/message_loop.h"
#include "base/path_service.h"
#include "chrome/browser/automation/url_request_automation_job.h"
#include "chrome/browser/net/url_request_failed_dns_job.h"
@@ -14,11 +13,11 @@
#include "chrome/browser/net/url_request_slow_download_job.h"
#include "chrome/browser/net/url_request_slow_http_job.h"
#include "chrome/common/chrome_paths.h"
+#include "chrome/browser/chrome_thread.h"
#include "chrome/test/automation/automation_messages.h"
#include "net/url_request/url_request_filter.h"
-MessageLoop* AutomationResourceMessageFilter::io_loop_ = NULL;
AutomationResourceMessageFilter::RenderViewMap
AutomationResourceMessageFilter::filtered_render_views_;
int AutomationResourceMessageFilter::unique_request_id_ = 1;
@@ -35,7 +34,6 @@ AutomationResourceMessageFilter::~AutomationResourceMessageFilter() {
void AutomationResourceMessageFilter::OnFilterAdded(IPC::Channel* channel) {
DCHECK(channel_ == NULL);
channel_ = channel;
- io_loop_ = MessageLoop::current();
}
// Called on the IPC thread:
@@ -94,7 +92,7 @@ bool AutomationResourceMessageFilter::OnMessageReceived(
// Called on the IPC thread:
bool AutomationResourceMessageFilter::Send(IPC::Message* message) {
// This has to be called on the IO thread.
- DCHECK_EQ(io_loop_, MessageLoop::current());
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
if (!channel_) {
delete message;
return false;
@@ -110,7 +108,7 @@ bool AutomationResourceMessageFilter::RegisterRequest(
return false;
}
- DCHECK_EQ(io_loop_, MessageLoop::current());
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
DCHECK(request_map_.end() == request_map_.find(job->id()));
request_map_[job->id()] = job;
return true;
@@ -118,7 +116,7 @@ bool AutomationResourceMessageFilter::RegisterRequest(
void AutomationResourceMessageFilter::UnRegisterRequest(
URLRequestAutomationJob* job) {
- DCHECK_EQ(io_loop_, MessageLoop::current());
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
DCHECK(request_map_.find(job->id()) != request_map_.end());
request_map_.erase(job->id());
}
@@ -131,19 +129,21 @@ bool AutomationResourceMessageFilter::RegisterRenderView(
return false;
}
- DCHECK(io_loop_);
- io_loop_->PostTask(FROM_HERE, NewRunnableFunction(
- AutomationResourceMessageFilter::RegisterRenderViewInIOThread,
- renderer_pid, renderer_id, tab_handle, filter));
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableFunction(
+ AutomationResourceMessageFilter::RegisterRenderViewInIOThread,
+ renderer_pid, renderer_id, tab_handle, filter));
return true;
}
void AutomationResourceMessageFilter::UnRegisterRenderView(
int renderer_pid, int renderer_id) {
- DCHECK(io_loop_);
- io_loop_->PostTask(FROM_HERE, NewRunnableFunction(
- AutomationResourceMessageFilter::UnRegisterRenderViewInIOThread,
- renderer_pid, renderer_id));
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableFunction(
+ AutomationResourceMessageFilter::UnRegisterRenderViewInIOThread,
+ renderer_pid, renderer_id));
}
void AutomationResourceMessageFilter::RegisterRenderViewInIOThread(
diff --git a/chrome/browser/automation/automation_resource_message_filter.h b/chrome/browser/automation/automation_resource_message_filter.h
index b209085..beb5fa8 100644
--- a/chrome/browser/automation/automation_resource_message_filter.h
+++ b/chrome/browser/automation/automation_resource_message_filter.h
@@ -13,7 +13,6 @@
#include "ipc/ipc_channel_proxy.h"
class URLRequestAutomationJob;
-class MessageLoop;
// This class filters out incoming automation IPC messages for network
// requests and processes them on the IPC thread. As a result, network
@@ -98,7 +97,6 @@ class AutomationResourceMessageFilter
// The channel associated with the automation connection. This pointer is not
// owned by this class.
IPC::Channel* channel_;
- static MessageLoop* io_loop_;
// A unique request id per process.
static int unique_request_id_;
diff --git a/chrome/browser/renderer_host/audio_renderer_host.cc b/chrome/browser/renderer_host/audio_renderer_host.cc
index 041023b..0fb3fe8 100644
--- a/chrome/browser/renderer_host/audio_renderer_host.cc
+++ b/chrome/browser/renderer_host/audio_renderer_host.cc
@@ -22,10 +22,10 @@
#include "base/histogram.h"
#include "base/lock.h"
-#include "base/message_loop.h"
#include "base/process.h"
#include "base/shared_memory.h"
#include "base/waitable_event.h"
+#include "chrome/browser/chrome_thread.h"
#include "chrome/browser/renderer_host/audio_renderer_host.h"
#include "chrome/common/render_messages.h"
#include "ipc/ipc_logging.h"
@@ -331,14 +331,14 @@ void AudioRendererHost::IPCAudioSource::StartBuffering() {
//-----------------------------------------------------------------------------
// AudioRendererHost implementations.
-AudioRendererHost::AudioRendererHost(MessageLoop* message_loop)
+AudioRendererHost::AudioRendererHost()
: process_id_(0),
process_handle_(0),
- ipc_sender_(NULL),
- io_loop_(message_loop) {
+ ipc_sender_(NULL) {
// Make sure we perform actual initialization operations in the thread where
// this object should live.
- io_loop_->PostTask(FROM_HERE,
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
NewRunnableMethod(this, &AudioRendererHost::OnInitialized));
}
@@ -349,15 +349,16 @@ AudioRendererHost::~AudioRendererHost() {
void AudioRendererHost::Destroy() {
// Post a message to the thread where this object should live and do the
// actual operations there.
- io_loop_->PostTask(
- FROM_HERE, NewRunnableMethod(this, &AudioRendererHost::OnDestroyed));
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableMethod(this, &AudioRendererHost::OnDestroyed));
}
// Event received when IPC channel is connected to the renderer process.
void AudioRendererHost::IPCChannelConnected(int process_id,
base::ProcessHandle process_handle,
IPC::Message::Sender* ipc_sender) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
process_id_ = process_id;
process_handle_ = process_handle;
ipc_sender_ = ipc_sender;
@@ -365,7 +366,7 @@ void AudioRendererHost::IPCChannelConnected(int process_id,
// Event received when IPC channel is closing.
void AudioRendererHost::IPCChannelClosing() {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
ipc_sender_ = NULL;
process_handle_ = 0;
process_id_ = 0;
@@ -411,7 +412,7 @@ bool AudioRendererHost::IsAudioRendererHostMessage(
void AudioRendererHost::OnCreateStream(
const IPC::Message& msg, int stream_id,
const ViewHostMsg_Audio_CreateStream& params) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
DCHECK(Lookup(msg.routing_id(), stream_id) == NULL);
IPCAudioSource* source = IPCAudioSource::CreateIPCAudioSource(
@@ -438,7 +439,7 @@ void AudioRendererHost::OnCreateStream(
}
void AudioRendererHost::OnPlayStream(const IPC::Message& msg, int stream_id) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
IPCAudioSource* source = Lookup(msg.routing_id(), stream_id);
if (source) {
source->Play();
@@ -448,7 +449,7 @@ void AudioRendererHost::OnPlayStream(const IPC::Message& msg, int stream_id) {
}
void AudioRendererHost::OnPauseStream(const IPC::Message& msg, int stream_id) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
IPCAudioSource* source = Lookup(msg.routing_id(), stream_id);
if (source) {
source->Pause();
@@ -458,7 +459,7 @@ void AudioRendererHost::OnPauseStream(const IPC::Message& msg, int stream_id) {
}
void AudioRendererHost::OnCloseStream(const IPC::Message& msg, int stream_id) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
IPCAudioSource* source = Lookup(msg.routing_id(), stream_id);
if (source) {
DestroySource(source);
@@ -467,7 +468,7 @@ void AudioRendererHost::OnCloseStream(const IPC::Message& msg, int stream_id) {
void AudioRendererHost::OnSetVolume(const IPC::Message& msg, int stream_id,
double left_channel, double right_channel) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
IPCAudioSource* source = Lookup(msg.routing_id(), stream_id);
if (source) {
source->SetVolume(left_channel, right_channel);
@@ -477,7 +478,7 @@ void AudioRendererHost::OnSetVolume(const IPC::Message& msg, int stream_id,
}
void AudioRendererHost::OnGetVolume(const IPC::Message& msg, int stream_id) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
IPCAudioSource* source = Lookup(msg.routing_id(), stream_id);
if (source) {
source->GetVolume();
@@ -488,7 +489,7 @@ void AudioRendererHost::OnGetVolume(const IPC::Message& msg, int stream_id) {
void AudioRendererHost::OnNotifyPacketReady(const IPC::Message& msg,
int stream_id, size_t packet_size) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
IPCAudioSource* source = Lookup(msg.routing_id(), stream_id);
if (source) {
source->NotifyPacketReady(packet_size);
@@ -498,14 +499,14 @@ void AudioRendererHost::OnNotifyPacketReady(const IPC::Message& msg,
}
void AudioRendererHost::OnInitialized() {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
// Increase the ref count of this object so it is active until we do
// Release().
AddRef();
}
void AudioRendererHost::OnDestroyed() {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
ipc_sender_ = NULL;
process_handle_ = 0;
process_id_ = 0;
@@ -515,14 +516,14 @@ void AudioRendererHost::OnDestroyed() {
}
void AudioRendererHost::OnSend(IPC::Message* message) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
if (ipc_sender_) {
ipc_sender_->Send(message);
}
}
void AudioRendererHost::OnDestroySource(IPCAudioSource* source) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
if (source) {
sources_.erase(SourceID(source->route_id(), source->stream_id()));
source->Close();
@@ -531,7 +532,7 @@ void AudioRendererHost::OnDestroySource(IPCAudioSource* source) {
}
void AudioRendererHost::DestroyAllSources() {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
std::vector<IPCAudioSource*> sources;
for (SourceMap::iterator i = sources_.begin(); i != sources_.end(); ++i) {
sources.push_back(i->second);
@@ -544,7 +545,7 @@ void AudioRendererHost::DestroyAllSources() {
AudioRendererHost::IPCAudioSource* AudioRendererHost::Lookup(int route_id,
int stream_id) {
- DCHECK(MessageLoop::current() == io_loop_);
+ DCHECK(ChromeThread::CurrentlyOn(ChromeThread::IO));
SourceMap::iterator i = sources_.find(SourceID(route_id, stream_id));
if (i != sources_.end())
return i->second;
@@ -552,13 +553,11 @@ AudioRendererHost::IPCAudioSource* AudioRendererHost::Lookup(int route_id,
}
void AudioRendererHost::Send(IPC::Message* message) {
- if (MessageLoop::current() == io_loop_) {
+ if (ChromeThread::CurrentlyOn(ChromeThread::IO)) {
OnSend(message);
} else {
- // TODO(hclam): make sure it's always safe to post a task to IO loop.
- // It is possible that IO message loop is destroyed but there's still some
- // dangling audio hardware threads that try to call this method.
- io_loop_->PostTask(FROM_HERE,
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
NewRunnableMethod(this, &AudioRendererHost::OnSend, message));
}
}
@@ -572,13 +571,11 @@ void AudioRendererHost::SendErrorMessage(int32 render_view_id,
}
void AudioRendererHost::DestroySource(IPCAudioSource* source) {
- if (MessageLoop::current() == io_loop_) {
+ if (ChromeThread::CurrentlyOn(ChromeThread::IO)) {
OnDestroySource(source);
} else {
- // TODO(hclam): make sure it's always safe to post a task to IO loop.
- // It is possible that IO message loop is destroyed but there's still some
- // dangling audio hardware threads that try to call this method.
- io_loop_->PostTask(FROM_HERE,
- NewRunnableMethod(this, &AudioRendererHost::OnDestroySource, source));
+ ChromeThread::PostTask(
+ ChromeThread::IO, FROM_HERE,
+ NewRunnableMethod(this, &AudioRendererHost::OnDestroySource, source));
}
}
diff --git a/chrome/browser/renderer_host/audio_renderer_host.h b/chrome/browser/renderer_host/audio_renderer_host.h
index a540c14..1a3b6e5 100644
--- a/chrome/browser/renderer_host/audio_renderer_host.h
+++ b/chrome/browser/renderer_host/audio_renderer_host.h
@@ -80,7 +80,6 @@
#include "testing/gtest/include/gtest/gtest_prod.h"
class AudioManager;
-class MessageLoop;
struct ViewHostMsg_Audio_CreateStream;
class AudioRendererHost : public base::RefCountedThreadSafe<AudioRendererHost> {
@@ -88,7 +87,7 @@ class AudioRendererHost : public base::RefCountedThreadSafe<AudioRendererHost> {
class IPCAudioSource;
public:
// Called from UI thread from the owner of this object.
- explicit AudioRendererHost(MessageLoop* message_loop);
+ AudioRendererHost();
// Destruction can happen on either UI thread or IO thread, but at destruction
// all associated sources are destroyed and streams are closed.
@@ -340,8 +339,6 @@ class AudioRendererHost : public base::RefCountedThreadSafe<AudioRendererHost> {
// and stream id. Returns NULL if not found.
IPCAudioSource* Lookup(int render_view_id, int stream_id);
- MessageLoop* io_loop() { return io_loop_; }
-
int process_id_;
base::ProcessHandle process_handle_;
IPC::Message::Sender* ipc_sender_;
@@ -351,8 +348,6 @@ class AudioRendererHost : public base::RefCountedThreadSafe<AudioRendererHost> {
typedef std::map<SourceID, IPCAudioSource*> SourceMap;
SourceMap sources_;
- MessageLoop* io_loop_;
-
DISALLOW_COPY_AND_ASSIGN(AudioRendererHost);
};
diff --git a/chrome/browser/renderer_host/audio_renderer_host_unittest.cc b/chrome/browser/renderer_host/audio_renderer_host_unittest.cc
index 5418331..c904a70 100644
--- a/chrome/browser/renderer_host/audio_renderer_host_unittest.cc
+++ b/chrome/browser/renderer_host/audio_renderer_host_unittest.cc
@@ -5,6 +5,7 @@
#include "base/message_loop.h"
#include "base/process_util.h"
#include "base/scoped_ptr.h"
+#include "chrome/browser/chrome_thread.h"
#include "chrome/browser/renderer_host/audio_renderer_host.h"
#include "chrome/common/render_messages.h"
#include "testing/gmock/include/gmock/gmock.h"
@@ -29,8 +30,8 @@ const int kPacketSize = 16384;
class MockAudioRendererHost : public AudioRendererHost {
public:
- MockAudioRendererHost(MessageLoop* loop)
- : AudioRendererHost(loop) {
+ MockAudioRendererHost()
+ : AudioRendererHost() {
}
virtual ~MockAudioRendererHost() {
@@ -120,7 +121,8 @@ class AudioRendererHostTest : public testing::Test {
virtual void SetUp() {
// Create a message loop so AudioRendererHost can use it.
message_loop_.reset(new MessageLoop(MessageLoop::TYPE_IO));
- host_ = new MockAudioRendererHost(message_loop_.get());
+ io_thread_.reset(new ChromeThread(ChromeThread::IO, message_loop_.get()));
+ host_ = new MockAudioRendererHost();
}
virtual void TearDown() {
@@ -128,11 +130,13 @@ class AudioRendererHostTest : public testing::Test {
// message_loop_.
host_->Destroy();
+ // Release the reference to the mock object.
+ host_ = NULL;
+
// We need to continue running message_loop_ to complete all destructions.
message_loop_->RunAllPending();
- // Release the reference to the mock object.
- host_ = NULL;
+ io_thread_.reset();
}
AudioRendererHost::IPCAudioSource* CreateAudioStream(
@@ -180,6 +184,7 @@ class AudioRendererHostTest : public testing::Test {
scoped_ptr<MessageLoop> message_loop_;
private:
+ scoped_ptr<ChromeThread> io_thread_;
DISALLOW_COPY_AND_ASSIGN(AudioRendererHostTest);
};
diff --git a/chrome/browser/renderer_host/browser_render_process_host.cc b/chrome/browser/renderer_host/browser_render_process_host.cc
index 076b803..2d58f8b 100644
--- a/chrome/browser/renderer_host/browser_render_process_host.cc
+++ b/chrome/browser/renderer_host/browser_render_process_host.cc
@@ -253,8 +253,7 @@ bool BrowserRenderProcessHost::Init(bool is_extensions_process) {
base::Thread* io_thread = g_browser_process->io_thread();
// Construct the AudioRendererHost with the IO thread.
- audio_renderer_host_ =
- new AudioRendererHost(io_thread->message_loop());
+ audio_renderer_host_ = new AudioRendererHost();
scoped_refptr<ResourceMessageFilter> resource_message_filter =
new ResourceMessageFilter(g_browser_process->resource_dispatcher_host(),