1eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Copyright 2013 The Chromium Authors. All rights reserved. 2eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// Use of this source code is governed by a BSD-style license that can be 3eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// found in the LICENSE file. 4eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 54e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#ifndef CHROME_BROWSER_UI_APP_LIST_PROFILE_LOADER_H_ 64e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#define CHROME_BROWSER_UI_APP_LIST_PROFILE_LOADER_H_ 7eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 8eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/callback.h" 9eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch#include "base/memory/weak_ptr.h" 10eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 11eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochnamespace base { 12eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass FilePath; 13eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch} 14eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 150529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass Profile; 160529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass ProfileLoaderUnittest; 170529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass ProfileStore; 180529e5d033099cbfc42635f6f6183833b09dff6eBen Murdochclass ScopedKeepAlive; 19eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 20eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This class loads profiles asynchronously and calls the provided callback once 21eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// the profile is ready. Only the callback for the most recent load request is 22eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// called, and only if the load was successful. 23eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// 24eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// This is useful for loading profiles in response to user interaction where 25eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch// only the latest requested profile is required. 264e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)// TODO(koz): Merge this into AppListServiceImpl. 27eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdochclass ProfileLoader { 28eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch public: 290529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch explicit ProfileLoader(ProfileStore* profile_store); 30eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch ~ProfileLoader(); 31eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 32eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch bool IsAnyProfileLoading() const; 33eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void InvalidatePendingProfileLoads(); 34eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void LoadProfileInvalidatingOtherLoads( 35eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch const base::FilePath& profile_file_path, 36eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Callback<void(Profile*)> callback); 37eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 38eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch private: 390529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch friend class ::ProfileLoaderUnittest; 400529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch 41eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void OnProfileLoaded(int profile_load_sequence_id, 42eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::Callback<void(Profile*)> callback, 434e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) Profile* profile); 44eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 45eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void IncrementPendingProfileLoads(); 46eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch void DecrementPendingProfileLoads(); 47eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 484e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles) ProfileStore* profile_store_; 490529e5d033099cbfc42635f6f6183833b09dff6eBen Murdoch scoped_ptr<ScopedKeepAlive> keep_alive_; 50eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int profile_load_sequence_id_; 51eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch int pending_profile_loads_; 52eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 53eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch base::WeakPtrFactory<ProfileLoader> weak_factory_; 54eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 55eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch DISALLOW_COPY_AND_ASSIGN(ProfileLoader); 56eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch}; 57eb525c5499e34cc9c4b825d6d9e75bb07cc06aceBen Murdoch 584e180b6a0b4720a9b8e9e959a882386f690f08ffTorne (Richard Coles)#endif // CHROME_BROWSER_UI_APP_LIST_PROFILE_LOADER_H_ 59