15d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Copyright 2013 The Chromium Authors. All rights reserved.
25d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// Use of this source code is governed by a BSD-style license that can be
35d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)// found in the LICENSE file.
45d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
55d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/app_list/test/chrome_app_list_test_support.h"
65d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
71320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "base/run_loop.h"
81320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/browser_process.h"
91320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/profiles/profile_manager.h"
105d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_service.h"
111320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci#include "chrome/browser/ui/app_list/app_list_service_impl.h"
125d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_syncable_service.h"
135d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)#include "chrome/browser/ui/app_list/app_list_syncable_service_factory.h"
145d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
155d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)namespace test {
165d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
171320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tuccinamespace {
181320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
191320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucciclass CreateProfileHelper {
201320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci public:
211320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreateProfileHelper() : profile_(NULL) {}
221320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
231320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* CreateAsync() {
241320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    ProfileManager* profile_manager = g_browser_process->profile_manager();
251320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    base::FilePath temp_profile_dir =
261320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        profile_manager->user_data_dir().AppendASCII("Profile 1");
271320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    profile_manager->CreateProfileAsync(
281320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        temp_profile_dir,
291320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        base::Bind(&CreateProfileHelper::OnProfileCreated,
301320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci                   base::Unretained(this)),
311320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        base::string16(),
321320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        base::string16(),
331320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci        std::string());
341320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    run_loop_.Run();
351320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    return profile_;
361320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
371320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
381320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci private:
391320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  void OnProfileCreated(Profile* profile, Profile::CreateStatus status) {
401320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    if (status == Profile::CREATE_STATUS_INITIALIZED) {
411320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      profile_ = profile;
421320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci      run_loop_.Quit();
431320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci    }
441320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  }
451320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
461320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  base::RunLoop run_loop_;
471320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  Profile* profile_;
481320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
491320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  DISALLOW_COPY_AND_ASSIGN(CreateProfileHelper);
501320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci};
511320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
521320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}  // namespace
531320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
545d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)app_list::AppListModel* GetAppListModel(AppListService* service) {
555d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return app_list::AppListSyncableServiceFactory::GetForProfile(
565d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)      service->GetCurrentAppListProfile())->model();
575d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
585d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
595d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)AppListService* GetAppListService() {
605d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  // TODO(tapted): Consider testing ash explicitly on the win-ash trybot.
615d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)  return AppListService::Get(chrome::GetActiveDesktop());
625d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}
635d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)
641320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciAppListServiceImpl* GetAppListServiceImpl() {
651320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // AppListServiceImpl is the only subclass of AppListService, which has pure
661320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  // virtuals. So this must either be NULL, or an AppListServiceImpl.
671320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return static_cast<AppListServiceImpl*>(GetAppListService());
681320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
691320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
701320f92c476a1ad9d19dba2a48c72b75566198e9Primiano TucciProfile* CreateSecondProfileAsync() {
711320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  CreateProfileHelper helper;
721320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci  return helper.CreateAsync();
731320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci}
741320f92c476a1ad9d19dba2a48c72b75566198e9Primiano Tucci
755d1f7b1de12d16ceb2c938c56701a3e8bfa558f7Torne (Richard Coles)}  // namespace test
76