// 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. #ifndef EXTENSIONS_BROWSER_SERIAL_EXTENSION_HOST_QUEUE_H_ #define EXTENSIONS_BROWSER_SERIAL_EXTENSION_HOST_QUEUE_H_ #include #include "base/macros.h" #include "base/memory/weak_ptr.h" #include "extensions/browser/extension_host_queue.h" namespace extensions { class DeferredStartRenderHost; // An ExtensionHostQueue which initializes DeferredStartRenderHosts in the order // they're Add()ed, with simple rate limiting logic that re-posts each task to // the UI thread, to avoid clogging it for a long period of time. class SerialExtensionHostQueue : public ExtensionHostQueue { public: SerialExtensionHostQueue(); ~SerialExtensionHostQueue() override; private: // ExtensionHostQueue: void Add(DeferredStartRenderHost* host) override; void Remove(DeferredStartRenderHost* host) override; // Queues up a delayed task to process the next DeferredStartRenderHost in // the queue. void PostTask(); // Creates the RenderView for the next host in the queue. void ProcessOneHost(); // True if this queue is currently in the process of starting an // DeferredStartRenderHost. bool pending_create_; // The list of DeferredStartRenderHosts waiting to be started. std::list queue_; base::WeakPtrFactory ptr_factory_; DISALLOW_COPY_AND_ASSIGN(SerialExtensionHostQueue); }; } // namespace extensions #endif // EXTENSIONS_BROWSER_SERIAL_EXTENSION_HOST_QUEUE_H_