// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.

#include "chrome/browser/task_manager/mock_web_contents_task_manager.h"

#include "base/stl_util.h"
#include "build/build_config.h"

#if defined(OS_CHROMEOS)
#include "chrome/browser/chromeos/resource_reporter/resource_reporter.h"
#endif  // defined(OS_CHROMEOS)

namespace task_manager {

MockWebContentsTaskManager::MockWebContentsTaskManager() {}

MockWebContentsTaskManager::~MockWebContentsTaskManager() {}

void MockWebContentsTaskManager::TaskAdded(Task* task) {
  DCHECK(task);
  DCHECK(!base::ContainsValue(tasks_, task));
  tasks_.push_back(task);
}

void MockWebContentsTaskManager::TaskRemoved(Task* task) {
  DCHECK(task);
  DCHECK(base::ContainsValue(tasks_, task));
  tasks_.erase(std::find(tasks_.begin(), tasks_.end(), task));
}

void MockWebContentsTaskManager::StartObserving() {
#if defined(OS_CHROMEOS)
  // On ChromeOS, the ResourceReporter needs to be turned off so as not to
  // interfere with the tests.
  chromeos::ResourceReporter::GetInstance()->StopMonitoring();
#endif  // defined(OS_CHROMEOS)

  provider_.SetObserver(this);
}

void MockWebContentsTaskManager::StopObserving() {
  provider_.ClearObserver();
}

}  // namespace task_manager
