return true;
}
+// static
+ApplicationDataManager* ApplicationDataManager::GetInstance() {
+ static ApplicationDataManager self;
+ return &self;
+}
+
+ApplicationDataManager::ApplicationDataManager() {
+}
+
+ApplicationDataManager::~ApplicationDataManager() {
+}
+
+ApplicationData* ApplicationDataManager::GetApplicationData(
+ const std::string& appid) {
+ auto it = cache_.find(appid);
+ if (it == cache_.end()) {
+ cache_[appid].reset(new ApplicationData(appid));
+ }
+ return cache_[appid].get();
+}
+
} // namespace common
std::string app_id_;
};
+
+class ApplicationDataManager {
+ public:
+ static ApplicationDataManager* GetInstance();
+
+ ApplicationData* GetApplicationData(const std::string& appid);
+
+ private:
+ ApplicationDataManager();
+ virtual ~ApplicationDataManager();
+
+ std::map<std::string, std::unique_ptr<ApplicationData>> cache_;
+};
+
+
} // namespace common
#endif // XWALK_COMMON_APPLICATION_DATA_H_
std::string appid = cmd->GetAppIdFromCommandLine(kRuntimeExecName);
// Load Manifest
- std::unique_ptr<common::ApplicationData>
- appdata(new common::ApplicationData(appid));
+ auto appdata_manager = common::ApplicationDataManager::GetInstance();
+ common::ApplicationData* appdata = appdata_manager->GetApplicationData(appid);
if (!appdata->LoadManifestData()) {
return false;
}
// Init WebApplication
native_window_ = CreateNativeWindow();
STEP_PROFILE_START("WebApplication Create");
- application_ = new WebApplication(native_window_, std::move(appdata));
+ application_ = new WebApplication(native_window_, appdata);
STEP_PROFILE_END("WebApplication Create");
application_->set_terminator([](){ ui_app_exit(); });
} // namespace
WebApplication::WebApplication(
- NativeWindow* window, std::unique_ptr<common::ApplicationData> app_data)
+ NativeWindow* window, common::ApplicationData* app_data)
: launched_(false),
debug_mode_(false),
verbose_mode_(false),
ewk_context_new_with_injected_bundle_path(INJECTED_BUNDLE_PATH)),
window_(window),
appid_(app_data->app_id()),
+ app_data_(app_data),
locale_manager_(new common::LocaleManager()),
- app_data_(std::move(app_data)),
terminator_(NULL) {
std::unique_ptr<char, decltype(std::free)*> path{app_get_data_path(),
std::free};
splash_screen_.reset(new SplashScreen(
window_, app_data_->splash_screen_info(), app_data_->application_path()));
resource_manager_.reset(
- new common::ResourceManager(app_data_.get(), locale_manager_.get()));
+ new common::ResourceManager(app_data_, locale_manager_.get()));
resource_manager_->set_base_resource_path(app_data_->application_path());
Initialize();
}
this);
InitializeNotificationCallback(ewk_context_, this);
- if (FindPrivilege(app_data_.get(), kFullscreenPrivilege)) {
+ if (FindPrivilege(app_data_, kFullscreenPrivilege)) {
ewk_context_tizen_extensible_api_string_set(ewk_context_,
kFullscreenFeature, true);
}
// Local Domain: Grant permission if defined, otherwise Popup user prompt.
// Remote Domain: Popup user prompt.
if (common::utils::StartsWith(url, "file://") &&
- FindPrivilege(app_data_.get(), kNotificationPrivilege)) {
+ FindPrivilege(app_data_, kNotificationPrivilege)) {
result_handler(true);
return;
}
// Local Domain: Grant permission if defined, otherwise block execution.
// Remote Domain: Popup user prompt if defined, otherwise block execution.
- if (!FindPrivilege(app_data_.get(), kLocationPrivilege)) {
+ if (!FindPrivilege(app_data_, kLocationPrivilege)) {
result_handler(false);
return;
}
// Local Domain: Grant permission if defined, otherwise Popup user prompt.
// Remote Domain: Popup user prompt.
if (common::utils::StartsWith(url, "file://") &&
- FindPrivilege(app_data_.get(), kStoragePrivilege)) {
+ FindPrivilege(app_data_, kStoragePrivilege)) {
result_handler(true);
return;
}
// Local Domain: Grant permission if defined, otherwise block execution.
// Remote Domain: Popup user prompt if defined, otherwise block execution.
- if (!FindPrivilege(app_data_.get(), kUsermediaPrivilege)) {
+ if (!FindPrivilege(app_data_, kUsermediaPrivilege)) {
result_handler(false);
return;
}
class WebApplication : public WebView::EventListener {
public:
WebApplication(NativeWindow* window,
- std::unique_ptr<common::ApplicationData> app_data);
+ common::ApplicationData* app_data);
virtual ~WebApplication();
void AppControl(std::unique_ptr<common::AppControl> appcontrol);
NativeWindow* window_;
std::string appid_;
std::string app_data_path_;
+ common::ApplicationData* app_data_;
std::list<WebView*> view_stack_;
std::unique_ptr<SplashScreen> splash_screen_;
std::unique_ptr<common::LocaleManager> locale_manager_;
- std::unique_ptr<common::ApplicationData> app_data_;
std::unique_ptr<common::ResourceManager> resource_manager_;
std::function<void(void)> terminator_;
int security_model_version_;
}
void Initialize(const std::string& app_id) {
PreInitialize();
- app_data_.reset(new common::ApplicationData(app_id));
- app_data_->LoadManifestData();
+
+ auto appdata_manager = common::ApplicationDataManager::GetInstance();
+ common::ApplicationData* app_data =
+ appdata_manager->GetApplicationData(app_id);
+
+ app_data->LoadManifestData();
// PreInitialized locale_manager_.reset(new common::LocaleManager);
locale_manager_->EnableAutoUpdate(true);
- if (app_data_->widget_info() != NULL &&
- !app_data_->widget_info()->default_locale().empty()) {
+ if (app_data->widget_info() != NULL &&
+ !app_data->widget_info()->default_locale().empty()) {
locale_manager_->SetDefaultLocale(
- app_data_->widget_info()->default_locale());
+ app_data->widget_info()->default_locale());
}
- resource_manager_.reset(new common::ResourceManager(app_data_.get(),
+ resource_manager_.reset(new common::ResourceManager(app_data,
locale_manager_.get()));
resource_manager_->set_base_resource_path(
- app_data_->application_path());
+ app_data->application_path());
auto widgetdb = extensions::WidgetPreferenceDB::GetInstance();
- widgetdb->Initialize(app_data_.get(),
+ widgetdb->Initialize(app_data,
locale_manager_.get());
}
~BundleGlobalData() {}
std::unique_ptr<common::ResourceManager> resource_manager_;
std::unique_ptr<common::LocaleManager> locale_manager_;
- std::unique_ptr<common::ApplicationData> app_data_;
+
bool preInitialized;
};