15821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Copyright (c) 2012 The Chromium Authors. All rights reserved. 25821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be 35821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)// found in the LICENSE file. 45821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 5c2e0dbddbe15c98d52c4786dac06cb8952a8ae6dTorne (Richard Coles)#include "base/message_loop/message_loop_proxy_impl.h" 65821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 75821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)#include "base/location.h" 8ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/logging.h" 9ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/incoming_task_queue.h" 10ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch#include "base/message_loop/message_loop.h" 115821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 125821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)namespace base { 13ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdochnamespace internal { 145821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 15ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochMessageLoopProxyImpl::MessageLoopProxyImpl( 16ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch scoped_refptr<IncomingTaskQueue> incoming_queue) 17ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch : incoming_queue_(incoming_queue), 18ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch valid_thread_id_(PlatformThread::CurrentId()) { 195821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 205821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 215821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MessageLoopProxyImpl::PostDelayedTask( 225821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const tracked_objects::Location& from_here, 235821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& task, 245821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta delay) { 25ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DCHECK(!task.is_null()) << from_here.ToString(); 26ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return incoming_queue_->AddToIncomingQueue(from_here, task, delay, true); 275821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 285821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 295821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MessageLoopProxyImpl::PostNonNestableDelayedTask( 305821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const tracked_objects::Location& from_here, 315821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) const base::Closure& task, 325821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) base::TimeDelta delay) { 33ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch DCHECK(!task.is_null()) << from_here.ToString(); 34ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return incoming_queue_->AddToIncomingQueue(from_here, task, delay, false); 355821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 365821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 375821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)bool MessageLoopProxyImpl::RunsTasksOnCurrentThread() const { 38ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch return valid_thread_id_ == PlatformThread::CurrentId(); 395821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 405821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 41ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben MurdochMessageLoopProxyImpl::~MessageLoopProxyImpl() { 425821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 435821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 44ca12bfac764ba476d6cd062bf1dde12cc64c3f40Ben Murdoch} // namespace internal 455821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 465821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)scoped_refptr<MessageLoopProxy> 475821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)MessageLoopProxy::current() { 485821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) MessageLoop* cur_loop = MessageLoop::current(); 495821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) if (!cur_loop) 505821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return NULL; 515821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) return cur_loop->message_loop_proxy(); 525821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} 535821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles) 545821806d5e7f356e8fa4b058a389a808ea183019Torne (Richard Coles)} // namespace base 55