| // Copyright 2015 The Chromium Authors |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #ifndef CHROME_BROWSER_AFTER_STARTUP_TASK_UTILS_H_ |
| #define CHROME_BROWSER_AFTER_STARTUP_TASK_UTILS_H_ |
| |
| #include "base/bind.h" |
| #include "base/callback.h" |
| #include "base/location.h" |
| #include "base/memory/ref_counted.h" |
| |
| namespace android { |
| class AfterStartupTaskUtilsJNI; |
| } |
| |
| namespace base { |
| class SequencedTaskRunner; |
| } |
| |
| class AfterStartupTaskUtils { |
| public: |
| AfterStartupTaskUtils() = delete; |
| AfterStartupTaskUtils(const AfterStartupTaskUtils&) = delete; |
| AfterStartupTaskUtils& operator=(const AfterStartupTaskUtils&) = delete; |
| |
| // Observes startup and when complete runs tasks that have accrued. |
| static void StartMonitoringStartup(); |
| |
| // Queues `task` to run on `destination_runner` after startup is complete. |
| // Note: prefer to simply post a task with BEST_EFFORT priority. This will |
| // delay the task until higher priority tasks are finished, which includes |
| // critical startup tasks. The BrowserThread::PostBestEffortTask() helper can |
| // post a BEST_EFFORT task to an arbitrary task runner. |
| static void PostTask( |
| const base::Location& from_here, |
| const scoped_refptr<base::SequencedTaskRunner>& destination_runner, |
| base::OnceClosure task); |
| |
| // Returns true if browser startup is complete. Only use this on a one-off |
| // basis; If you need to poll this function constantly, use the above |
| // PostTask() API instead. |
| static bool IsBrowserStartupComplete(); |
| |
| // For use by unit tests where we don't have normal content loading |
| // infrastructure and thus StartMonitoringStartup() is unsuitable. |
| static void SetBrowserStartupIsCompleteForTesting(); |
| |
| static void UnsafeResetForTesting(); |
| |
| private: |
| // TODO(wkorman): Look into why Android calls |
| // SetBrowserStartupIsComplete() directly. Ideally it would use |
| // StartMonitoringStartup() as the normal approach. |
| friend class android::AfterStartupTaskUtilsJNI; |
| |
| static void SetBrowserStartupIsComplete(); |
| }; |
| |
| #endif // CHROME_BROWSER_AFTER_STARTUP_TASK_UTILS_H_ |