browser_child_process_host_iterator.cc revision 2a99a7e74a7f215066514fe81d2bfa6639d9eddd
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
11namespace content {
12
13BrowserChildProcessHostIterator::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
20BrowserChildProcessHostIterator::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  iterator_ = BrowserChildProcessHostImpl::GetIterator()->begin();
25  if (!Done() && (*iterator_)->GetData().process_type != process_type_)
26    ++(*this);
27}
28
29bool BrowserChildProcessHostIterator::operator++() {
30  CHECK(!Done());
31  do {
32    ++iterator_;
33    if (Done())
34      break;
35
36    if (!all_ && (*iterator_)->GetData().process_type != process_type_)
37      continue;
38
39    return true;
40  } while (true);
41
42  return false;
43}
44
45bool BrowserChildProcessHostIterator::Done() {
46  return iterator_ == BrowserChildProcessHostImpl::GetIterator()->end();
47}
48
49const ChildProcessData& BrowserChildProcessHostIterator::GetData() {
50  CHECK(!Done());
51  return (*iterator_)->GetData();
52}
53
54bool BrowserChildProcessHostIterator::Send(IPC::Message* message) {
55  CHECK(!Done());
56  return (*iterator_)->Send(message);
57}
58
59BrowserChildProcessHostDelegate*
60    BrowserChildProcessHostIterator::GetDelegate() {
61  return (*iterator_)->delegate();
62}
63
64}  // namespace content
65