| Index: ios/chrome/app/startup_tasks.mm
|
| diff --git a/ios/chrome/app/startup_tasks.mm b/ios/chrome/app/startup_tasks.mm
|
| new file mode 100644
|
| index 0000000000000000000000000000000000000000..bbf847ca7a7a90e9cb3c3dd9066293452f705374
|
| --- /dev/null
|
| +++ b/ios/chrome/app/startup_tasks.mm
|
| @@ -0,0 +1,107 @@
|
| +// 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.
|
| +
|
| +#import "ios/chrome/app/startup_tasks.h"
|
| +
|
| +#import <MediaPlayer/MediaPlayer.h>
|
| +
|
| +#import "base/ios/weak_nsobject.h"
|
| +#import "base/mac/bind_objc_block.h"
|
| +#include "components/bookmarks/browser/startup_task_runner_service.h"
|
| +#include "components/reading_list/core/reading_list_switches.h"
|
| +#import "ios/chrome/app/deferred_initialization_runner.h"
|
| +#include "ios/chrome/app/tests_hook.h"
|
| +#include "ios/chrome/browser/application_context.h"
|
| +#include "ios/chrome/browser/bookmarks/startup_task_runner_service_factory.h"
|
| +#include "ios/chrome/browser/browser_state/chrome_browser_state.h"
|
| +#include "ios/chrome/browser/ios_chrome_io_thread.h"
|
| +#import "ios/chrome/browser/omaha/omaha_service.h"
|
| +#include "ios/chrome/browser/reading_list/reading_list_download_service.h"
|
| +#include "ios/chrome/browser/reading_list/reading_list_download_service_factory.h"
|
| +#import "ios/chrome/browser/ui/main/browser_view_information.h"
|
| +#import "ios/chrome/browser/upgrade/upgrade_center.h"
|
| +
|
| +namespace {
|
| +// Constants for deferred initilization of the profile start-up task runners.
|
| +NSString* const kStartProfileStartupTaskRunners =
|
| + @"StartProfileStartupTaskRunners";
|
| +} // namespace
|
| +
|
| +@interface StartupTasks ()
|
| +
|
| +// Performs browser state initialization tasks that don't need to happen
|
| +// synchronously at startup.
|
| +- (void)performDeferredInitializationForBrowserState:
|
| + (ios::ChromeBrowserState*)browserState;
|
| +// Called when UIApplicationWillResignActiveNotification is received.
|
| +- (void)applicationWillResignActiveNotification:(NSNotification*)notification;
|
| +
|
| +@end
|
| +
|
| +@implementation StartupTasks
|
| +
|
| +#pragma mark - Public methods.
|
| +
|
| +- (void)scheduleDeferredBrowserStateInitialization:
|
| + (ios::ChromeBrowserState*)browserState {
|
| + DCHECK(browserState);
|
| + // Schedule the start of the profile deferred task runners.
|
| + [[DeferredInitializationRunner sharedInstance]
|
| + enqueueBlockNamed:kStartProfileStartupTaskRunners
|
| + block:^{
|
| + [self performDeferredInitializationForBrowserState:
|
| + browserState];
|
| + }];
|
| +}
|
| +
|
| +- (void)initializeOmaha {
|
| +#if defined(GOOGLE_CHROME_BUILD)
|
| + if (tests_hook::DisableUpdateService())
|
| + return;
|
| + // Start omaha service. We only do this on official builds.
|
| + OmahaService::Start(
|
| + GetApplicationContext()
|
| + ->GetIOSChromeIOThread()
|
| + ->system_url_request_context_getter(),
|
| + base::BindBlock(^(const UpgradeRecommendedDetails& details) {
|
| + [[UpgradeCenter sharedInstance] upgradeNotificationDidOccur:details];
|
| + }));
|
| +#endif // defined(GOOGLE_CHROME_BUILD)
|
| +}
|
| +
|
| +- (void)registerForApplicationWillResignActiveNotification {
|
| + [[NSNotificationCenter defaultCenter]
|
| + addObserver:self
|
| + selector:@selector(applicationWillResignActiveNotification:)
|
| + name:UIApplicationWillResignActiveNotification
|
| + object:nil];
|
| +}
|
| +
|
| +#pragma mark - Private methods.
|
| +
|
| +- (void)performDeferredInitializationForBrowserState:
|
| + (ios::ChromeBrowserState*)browserState {
|
| + ios::StartupTaskRunnerServiceFactory::GetForBrowserState(browserState)
|
| + ->StartDeferredTaskRunners();
|
| + if (reading_list::switches::IsReadingListEnabled()) {
|
| + ReadingListDownloadServiceFactory::GetForBrowserState(browserState)
|
| + ->Initialize();
|
| + }
|
| +}
|
| +
|
| +- (void)applicationWillResignActiveNotification:(NSNotification*)notification {
|
| + // If the control center is displaying now-playing information from Chrome,
|
| + // attempt to clear it so that the URL is no longer shown
|
| + // (crbug.com/475820). The now-playing information will not be cleared if
|
| + // it's from a different app.
|
| + NSDictionary* nowPlayingInfo =
|
| + [[MPNowPlayingInfoCenter defaultCenter] nowPlayingInfo];
|
| + if (nowPlayingInfo[MPMediaItemPropertyTitle]) {
|
| + // No need to clear playing info if media is being played but there is no
|
| + // way to check if video or audio is playing in web view.
|
| + [[MPNowPlayingInfoCenter defaultCenter] setNowPlayingInfo:nil];
|
| + }
|
| +}
|
| +
|
| +@end
|
|
|