Home | History | Annotate | Download | only in browser
      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
      3 // found in the LICENSE file.
      4 
      5 #include "content/public/browser/browser_child_process_host_iterator.h"
      6 
      7 #include "base/logging.h"
      8 #include "content/browser/browser_child_process_host_impl.h"
      9 #include "content/public/browser/browser_thread.h"
     10 
     11 namespace content {
     12 
     13 BrowserChildProcessHostIterator::BrowserChildProcessHostIterator()
     14     : all_(true), process_type_(PROCESS_TYPE_UNKNOWN) {
     15   CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) <<
     16       "BrowserChildProcessHostIterator must be used on the IO thread.";
     17   iterator_ = BrowserChildProcessHostImpl::GetIterator()->begin();
     18 }
     19 
     20 BrowserChildProcessHostIterator::BrowserChildProcessHostIterator(int type)
     21     : all_(false), process_type_(type) {
     22   CHECK(BrowserThread::CurrentlyOn(BrowserThread::IO)) <<
     23       "BrowserChildProcessHostIterator must be used on the IO thread.";
     24   DCHECK_NE(PROCESS_TYPE_RENDERER, type) <<
     25       "BrowserChildProcessHostIterator doesn't work for renderer processes; "
     26       "try RenderProcessHost::AllHostsIterator() instead.";
     27   iterator_ = BrowserChildProcessHostImpl::GetIterator()->begin();
     28   if (!Done() && (*iterator_)->GetData().process_type != process_type_)
     29     ++(*this);
     30 }
     31 
     32 BrowserChildProcessHostIterator::~BrowserChildProcessHostIterator() {
     33 }
     34 
     35 bool BrowserChildProcessHostIterator::operator++() {
     36   CHECK(!Done());
     37   do {
     38     ++iterator_;
     39     if (Done())
     40       break;
     41 
     42     if (!all_ && (*iterator_)->GetData().process_type != process_type_)
     43       continue;
     44 
     45     return true;
     46   } while (true);
     47 
     48   return false;
     49 }
     50 
     51 bool BrowserChildProcessHostIterator::Done() {
     52   return iterator_ == BrowserChildProcessHostImpl::GetIterator()->end();
     53 }
     54 
     55 const ChildProcessData& BrowserChildProcessHostIterator::GetData() {
     56   CHECK(!Done());
     57   return (*iterator_)->GetData();
     58 }
     59 
     60 bool BrowserChildProcessHostIterator::Send(IPC::Message* message) {
     61   CHECK(!Done());
     62   return (*iterator_)->Send(message);
     63 }
     64 
     65 BrowserChildProcessHostDelegate*
     66     BrowserChildProcessHostIterator::GetDelegate() {
     67   return (*iterator_)->delegate();
     68 }
     69 
     70 }  // namespace content
     71