Upstream version 5.34.104.0
[platform/framework/web/crosswalk.git] / src / xwalk / application / browser / application_storage.cc
1 // Copyright (c) 2013 Intel Corporation. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file.
4
5 #include "xwalk/application/browser/application_storage.h"
6
7 #include <utility>
8
9 #include "xwalk/application/browser/application_storage_impl.h"
10 #include "xwalk/application/common/application_file_util.h"
11 #include "xwalk/runtime/browser/runtime_context.h"
12
13 namespace xwalk {
14 namespace application {
15
16 ApplicationStorage::ApplicationStorage(const base::FilePath& path)
17     : data_path_(path),
18       impl_(new ApplicationStorageImpl(path)) {
19   impl_->Init(applications_);
20 }
21
22 ApplicationStorage::~ApplicationStorage() {
23 }
24
25 bool ApplicationStorage::AddApplication(
26     scoped_refptr<ApplicationData> app_data) {
27   if (Contains(app_data->ID())) {
28     LOG(WARNING) << "Application " << app_data->ID()
29                  << " has been already installed";
30     return false;
31   }
32
33   if (!impl_->AddApplication(app_data.get(), base::Time::Now()) ||
34       !Insert(app_data))
35     return false;
36
37   return true;
38 }
39
40 bool ApplicationStorage::RemoveApplication(const std::string& id) {
41   if (applications_.erase(id) != 1) {
42     LOG(ERROR) << "Application " << id << " is invalid.";
43     return false;
44   }
45
46   if (!impl_->RemoveApplication(id)) {
47     LOG(ERROR) << "Error occurred while trying to remove application"
48                   "information with id "
49                << id << " from database.";
50     return false;
51   }
52
53   return true;
54 }
55
56 bool ApplicationStorage::UpdateApplication(
57     scoped_refptr<ApplicationData> app_data) {
58   ApplicationData::ApplicationDataMapIterator it =
59       applications_.find(app_data->ID());
60   if (it == applications_.end()) {
61     LOG(ERROR) << "Application " << app_data->ID() << " is invalid.";
62     return false;
63   }
64
65   it->second = app_data;
66   if (!impl_->UpdateApplication(app_data.get(), base::Time::Now()))
67     return false;
68
69   return true;
70 }
71
72 bool ApplicationStorage::Contains(const std::string& app_id) const {
73   return applications_.find(app_id) != applications_.end();
74 }
75
76 scoped_refptr<ApplicationData> ApplicationStorage::GetApplicationData(
77     const std::string& application_id) const {
78   ApplicationData::ApplicationDataMap::const_iterator it =
79       applications_.find(application_id);
80   if (it != applications_.end()) {
81     return it->second;
82   }
83
84   return NULL;
85 }
86
87 const ApplicationData::ApplicationDataMap&
88 ApplicationStorage::GetInstalledApplications() const {
89   return applications_;
90 }
91
92 bool ApplicationStorage::Insert(scoped_refptr<ApplicationData> app_data) {
93   return applications_.insert(
94       std::pair<std::string, scoped_refptr<ApplicationData> >(
95           app_data->ID(), app_data)).second;
96 }
97
98 }  // namespace application
99 }  // namespace xwalk