| Index: chrome/browser/chromeos/power/extension_event_observer.h
|
| diff --git a/chrome/browser/chromeos/power/extension_event_observer.h b/chrome/browser/chromeos/power/extension_event_observer.h
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..35bd4b52b819e15e436b8d10f5392b2c0420e95e
|
| --- /dev/null
|
| +++ b/chrome/browser/chromeos/power/extension_event_observer.h
|
| @@ -0,0 +1,136 @@
|
| +// 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 CHROME_BROWSER_CHROMEOS_POWER_EXTENSION_EVENT_OBSERVER_H_
|
| +#define CHROME_BROWSER_CHROMEOS_POWER_EXTENSION_EVENT_OBSERVER_H_
|
| +
|
| +#include <set>
|
| +#include <string>
|
| +
|
| +#include "base/callback.h"
|
| +#include "base/cancelable_callback.h"
|
| +#include "base/containers/scoped_ptr_hash_map.h"
|
| +#include "base/macros.h"
|
| +#include "base/memory/scoped_ptr.h"
|
| +#include "base/memory/weak_ptr.h"
|
| +#include "base/time/time.h"
|
| +#include "chromeos/dbus/power_manager_client.h"
|
| +#include "content/public/browser/notification_details.h"
|
| +#include "content/public/browser/notification_observer.h"
|
| +#include "content/public/browser/notification_registrar.h"
|
| +#include "content/public/browser/notification_source.h"
|
| +#include "extensions/browser/extension_host_observer.h"
|
| +#include "extensions/browser/process_manager_observer.h"
|
| +
|
| +class Profile;
|
| +
|
| +namespace extensions {
|
| +class ExtensionHost;
|
| +}
|
| +
|
| +namespace chromeos {
|
| +
|
| +// This class listens for extension events that should potentially keep the
|
| +// system awake while they are being processed. Examples include push messages
|
| +// that arrive from Google's GCM servers and network requests initiated by
|
| +// extensions while processing the push messages. This class is owned by
|
| +// WakeOnWifiManager.
|
| +class ExtensionEventObserver : public content::NotificationObserver,
|
| + public extensions::ProcessManagerObserver,
|
| + public extensions::ExtensionHostObserver,
|
| + public PowerManagerClient::Observer {
|
| + public:
|
| + class TestApi {
|
| + public:
|
| + ~TestApi();
|
| +
|
| + // Runs |suspend_readiness_callback_| if it is non-null and then resets it.
|
| + // Returns true iff it actually ran the callback.
|
| + bool MaybeRunSuspendReadinessCallback();
|
| +
|
| + // Returns true if the ExtensionEventObserver will delay suspend attempts
|
| + // for |host| if host has pending push messages or network requests.
|
| + bool WillDelaySuspendForExtensionHost(extensions::ExtensionHost* host);
|
| +
|
| + private:
|
| + friend class ExtensionEventObserver;
|
| +
|
| + explicit TestApi(base::WeakPtr<ExtensionEventObserver> parent);
|
| +
|
| + base::WeakPtr<ExtensionEventObserver> parent_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(TestApi);
|
| + };
|
| +
|
| + ExtensionEventObserver();
|
| + ~ExtensionEventObserver() override;
|
| +
|
| + scoped_ptr<TestApi> CreateTestApi();
|
| +
|
| + // Called by the WakeOnWifiManager to control whether the
|
| + // ExtensionEventObserver should or should not delay the system suspend.
|
| + void SetShouldDelaySuspend(bool should_delay);
|
| +
|
| + // content::NotificationObserver override.
|
| + void Observe(int type,
|
| + const content::NotificationSource& source,
|
| + const content::NotificationDetails& details) override;
|
| +
|
| + // extensions::ProcessManagerObserver overrides.
|
| + void OnBackgroundHostCreated(extensions::ExtensionHost* host) override;
|
| +
|
| + // extensions::ExtensionHostObserver overrides.
|
| + void OnExtensionHostDestroyed(const extensions::ExtensionHost* host) override;
|
| + void OnExtensionMessageDispatched(const extensions::ExtensionHost* host,
|
| + const std::string& event_name,
|
| + int message_id) override;
|
| + void OnExtensionMessageAcked(const extensions::ExtensionHost* host,
|
| + int message_id) override;
|
| + void OnNetworkRequestStarted(const extensions::ExtensionHost* host,
|
| + uint64 request_id) override;
|
| + void OnNetworkRequestDone(const extensions::ExtensionHost* host,
|
| + uint64 request_id) override;
|
| +
|
| + // PowerManagerClient::Observer overrides.
|
| + void SuspendImminent() override;
|
| + void DarkSuspendImminent() override;
|
| + void SuspendDone(const base::TimeDelta& duration) override;
|
| +
|
| + private:
|
| + friend class TestApi;
|
| +
|
| + // Called when a new profile is created or destroyed.
|
| + void OnProfileAdded(Profile* profile);
|
| + void OnProfileDestroyed(Profile* profile);
|
| +
|
| + // Called when the system is about to perform a regular suspend or a dark
|
| + // suspend.
|
| + void OnSuspendImminent(bool dark_suspend);
|
| +
|
| + // Reports readiness to suspend to the PowerManagerClient if a suspend is
|
| + // pending and there are no outstanding events keeping the system awake.
|
| + void MaybeReportSuspendReadiness();
|
| +
|
| + struct KeepaliveSources;
|
| + base::ScopedPtrHashMap<const extensions::ExtensionHost*, KeepaliveSources>
|
| + keepalive_sources_;
|
| +
|
| + std::set<Profile*> active_profiles_;
|
| +
|
| + bool should_delay_suspend_;
|
| + bool suspend_is_pending_;
|
| + int suspend_keepalive_count_;
|
| + base::Closure power_manager_callback_;
|
| + base::CancelableClosure suspend_readiness_callback_;
|
| +
|
| + content::NotificationRegistrar registrar_;
|
| +
|
| + base::WeakPtrFactory<ExtensionEventObserver> weak_factory_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(ExtensionEventObserver);
|
| +};
|
| +
|
| +} // namespace chromeos
|
| +
|
| +#endif // CHROME_BROWSER_CHROMEOS_POWER_EXTENSION_EVENT_OBSERVER_H_
|
|
|