// Copyright 2015 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 #include "base/callback.h" #include "base/macros.h" #include "extensions/browser/process_manager_observer.h" namespace extensions { class Extension; class ExtensionHost; class ProcessManager; // Observes the background page load state of an extension. Use this in tests // which rely on a specific open or close state of a background page. class BackgroundPageWatcher : public ProcessManagerObserver { public: BackgroundPageWatcher(ProcessManager* process_manager, const Extension* extension); ~BackgroundPageWatcher(); // Returns when the background page is open. If the background page is // already open, returns immediately. void WaitForOpen(); // Returns when the background page is closed. If the background page is // already closed, returns immediately. void WaitForClose(); private: // Returns when the background page has open state of |wait_for_open|. If the // background page is already in that state, returns immediately. void WaitForOpenState(bool wait_for_open); bool IsBackgroundPageOpen(); // ProcessManagerObserver: void OnExtensionFrameRegistered( const std::string& extension_id, content::RenderFrameHost* render_frame_host) override; void OnExtensionFrameUnregistered( const std::string& extension_id, content::RenderFrameHost* render_frame_host) override; ProcessManager* process_manager_; const std::string extension_id_; base::Closure quit_run_loop_; bool is_waiting_for_open_; bool is_waiting_for_close_; DISALLOW_COPY_AND_ASSIGN(BackgroundPageWatcher); }; } // namespace extensions