| Index: chrome/browser/ui/app_list/arc/arc_app_model_builder.cc | 
| diff --git a/chrome/browser/ui/app_list/arc/arc_app_model_builder.cc b/chrome/browser/ui/app_list/arc/arc_app_model_builder.cc | 
| new file mode 100644 | 
| index 0000000000000000000000000000000000000000..6a22b7f64dd9623b06562baa0c821fb6b6949933 | 
| --- /dev/null | 
| +++ b/chrome/browser/ui/app_list/arc/arc_app_model_builder.cc | 
| @@ -0,0 +1,85 @@ | 
| +// 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. | 
| + | 
| +#include "chrome/browser/ui/app_list/arc/arc_app_model_builder.h" | 
| + | 
| +#include "chrome/browser/profiles/profile.h" | 
| +#include "chrome/browser/ui/app_list/arc/arc_app_item.h" | 
| + | 
| +ArcAppModelBuilder::ArcAppModelBuilder(AppListControllerDelegate* controller) | 
| +    : AppListModelBuilder(controller, ArcAppItem::kItemType) { | 
| +} | 
| + | 
| +ArcAppModelBuilder::~ArcAppModelBuilder() { | 
| +  prefs_->RemoveObserver(this); | 
| +} | 
| + | 
| +void ArcAppModelBuilder::BuildModel() { | 
| +  prefs_ = ArcAppListPrefs::Get(profile()); | 
| + | 
| +  std::vector<std::string> app_ids = prefs_->GetAppIds(); | 
| +  for (auto& app_id : app_ids) { | 
| +    scoped_ptr<ArcAppListPrefs::AppInfo> app_info = prefs_->GetApp(app_id); | 
| +    if (!app_info) { | 
| +      continue; | 
| +    } | 
| +    InsertApp(CreateApp(app_id, *app_info)); | 
| +  } | 
| + | 
| +  prefs_->AddObserver(this); | 
| +} | 
| + | 
| +ArcAppItem* ArcAppModelBuilder::GetArcAppItem(const std::string& app_id) { | 
| +  return static_cast<ArcAppItem*>(GetAppItem(app_id)); | 
| +} | 
| + | 
| +scoped_ptr<ArcAppItem> ArcAppModelBuilder::CreateApp( | 
| +    const std::string& app_id, | 
| +    const ArcAppListPrefs::AppInfo& app_info) { | 
| +  scoped_ptr<ArcAppItem> app_item(new ArcAppItem(profile(), | 
| +                                                 GetSyncItem(app_id), | 
| +                                                 app_id, | 
| +                                                 app_info.name, | 
| +                                                 app_info.ready)); | 
| +  return app_item; | 
| +} | 
| + | 
| +void ArcAppModelBuilder::OnAppRegistered( | 
| +    const std::string& app_id, | 
| +    const ArcAppListPrefs::AppInfo& app_info) { | 
| +  InsertApp(CreateApp(app_id, app_info)); | 
| +} | 
| + | 
| +void ArcAppModelBuilder::OnAppReadyChanged(const std::string& app_id, | 
| +                                           bool ready) { | 
| +  ArcAppItem* app_item = GetArcAppItem(app_id); | 
| +  if (!app_item) { | 
| +    LOG(WARNING) << "Could not update the state of ARC app(" << app_id | 
| +        << ") because it was not found."; | 
| +    return; | 
| +  } | 
| + | 
| +  app_item->SetReady(ready); | 
| +} | 
| + | 
| +void ArcAppModelBuilder::OnAppIconUpdated(const std::string& app_id, | 
| +                                          ui::ScaleFactor scale_factor) { | 
| +  ArcAppItem* app_item = GetArcAppItem(app_id); | 
| +  if (!app_item) { | 
| +    LOG(WARNING) << "Could not update the icon of ARC app(" << app_id | 
| +        << ") because it was not found."; | 
| +    return; | 
| +  } | 
| + | 
| +  // Initiate async icon reloading. | 
| +  app_item->arc_app_icon()->LoadForScaleFactor(scale_factor); | 
| +} | 
| + | 
| +void ArcAppModelBuilder::OnListItemMoved(size_t from_index, | 
| +                                         size_t to_index, | 
| +                                         app_list::AppListItem* item) { | 
| +  // On ChromeOS we expect that ArcAppModelBuilder is initialized with | 
| +  // AppListSyncableService and in this case this observer is not used. | 
| +  NOTREACHED(); | 
| +} | 
|  |