File: app_list_model_builder.cc

package info (click to toggle)
chromium-browser 57.0.2987.98-1~deb8u1
  • links: PTS, VCS
  • area: main
  • in suites: jessie
  • size: 2,637,852 kB
  • ctags: 2,544,394
  • sloc: cpp: 12,815,961; ansic: 3,676,222; python: 1,147,112; asm: 526,608; java: 523,212; xml: 286,794; perl: 92,654; sh: 86,408; objc: 73,271; makefile: 27,698; cs: 18,487; yacc: 13,031; tcl: 12,957; pascal: 4,875; ml: 4,716; lex: 3,904; sql: 3,862; ruby: 1,982; lisp: 1,508; php: 1,368; exp: 404; awk: 325; csh: 117; jsp: 39; sed: 37
file content (76 lines) | stat: -rw-r--r-- 2,247 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
// 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/app_list_model_builder.h"

#include <utility>

#include "chrome/browser/ui/app_list/app_list_syncable_service.h"
#include "ui/app_list/app_list_item.h"
#include "ui/app_list/app_list_model.h"

AppListModelBuilder::AppListModelBuilder(AppListControllerDelegate* controller,
                                         const char* item_type)
    : controller_(controller),
      item_type_(item_type) {
}

AppListModelBuilder::~AppListModelBuilder() {
  if (!service_)
    model_->top_level_item_list()->RemoveObserver(this);
}

void AppListModelBuilder::InitializeWithService(
    app_list::AppListSyncableService* service,
    app_list::AppListModel* model) {
  DCHECK(!service_ && !profile_);
  model_ = model;
  service_ = service;
  profile_ = service->profile();

  BuildModel();
}

void AppListModelBuilder::InitializeWithProfile(Profile* profile,
                                                app_list::AppListModel* model) {
  DCHECK(!service_ && !profile_);
  model_ = model;
  model_->top_level_item_list()->AddObserver(this);
  profile_ = profile;

  BuildModel();
}

void AppListModelBuilder::InsertApp(
    std::unique_ptr<app_list::AppListItem> app) {
  if (service_) {
    service_->AddItem(std::move(app));
    return;
  }
  model_->AddItem(std::move(app));
}

void AppListModelBuilder::RemoveApp(const std::string& id,
                                    bool unsynced_change) {
  if (!unsynced_change && service_) {
    service_->RemoveUninstalledItem(id);
    return;
  }
  model_->DeleteUninstalledItem(id);
}

const app_list::AppListSyncableService::SyncItem*
    AppListModelBuilder::GetSyncItem(const std::string& id) {
  return service_ ? service_->GetSyncItem(id) : nullptr;
}

app_list::AppListItem* AppListModelBuilder::GetAppItem(const std::string& id) {
  app_list::AppListItem* item = model_->FindItem(id);
  if (item && item->GetItemType() != item_type_) {
    VLOG(2) << "App Item matching id: " << id
            << " has incorrect type: '" << item->GetItemType() << "'";
    return nullptr;
  }
  return item;
}