#include "wrt/src/browser/tv/input_device_manager.h"
#include "wrt/src/browser/tv/native_web_runtime_delegate_tv.h"
#include "wrt/src/browser/tv/tv_window_manager.h"
-#include "wrt/src/browser/tv/widget_state.h"
#include "wrt/src/browser/tv/wrt_native_window_tv.h"
-#include "wrt/src/common/app_db.h"
#include "wrt/src/common/constants.h"
#ifndef XWALK_EXTENSION_PATH
ParseUpgradableExtensions();
}
-void XWalkExtensionManagerTV::UnloadExtensions() {
- XWalkExtensionManager::UnloadExtensions();
- SaveLoadedExtensions();
-}
-
-void XWalkExtensionManagerTV::CreateInstance(
- const std::string& name, CreateInstanceCallback callback) {
- XWalkExtensionManager::CreateInstance(name, std::move(callback));
-
- auto it = extensions_.find(name);
- if (it == extensions_.end())
- return;
-
- auto widget_state = wrt::WidgetStateProvider::GetWidgetStatus();
- if (widget_state == "init" || widget_state == "load") {
- loaded_extensions_[name] = it->second->GetLibraryPath();
- }
-}
-
std::string XWalkExtensionManagerTV::HandleRuntimeMessageInternal(
const std::string& type, const std::string& value) {
if (electron::Browser::Get()->is_quitting()) {
return preload_extensions_.find(extension_name) != preload_extensions_.end();
}
-void XWalkExtensionManagerTV::SaveLoadedExtensions() {
- for (auto& extension : preload_extensions_) {
- loaded_extensions_.erase(extension.first);
- }
-
- for (const auto& it : prefetched_extensions_)
- loaded_extensions_.erase(it.first);
-
- if (!loaded_extensions_.size())
- return;
-
- std::string extension_list;
- for (const auto& it : prefetched_extensions_)
- extension_list.append(it.first + ":").append(it.second + ",");
- for (const auto& it : loaded_extensions_)
- extension_list.append(it.first + ":").append(it.second + ",");
- extension_list.erase(extension_list.size() - 1);
-
- LOG(INFO) << "SaveLoadedExtensions : " << extension_list;
- auto widget_version =
- wrt::ApplicationData::GetInstance().widget_info().version();
- auto& db = wrt::AppDB::GetInstance();
- db.Set("loaded_extension", widget_version, extension_list);
-}
-
-void XWalkExtensionManagerTV::PrefetchExtensions() {
- static bool prefetched;
- if (prefetched)
- return;
- prefetched = true;
-
- if (electron::Browser::Get()->is_quitting())
- return;
-
- auto widget_version =
- wrt::ApplicationData::GetInstance().widget_info().version();
- auto& db = wrt::AppDB::GetInstance();
- auto loaded_extensions = db.Get("loaded_extension", widget_version);
- if (loaded_extensions.empty())
- return;
-
- LOG(INFO) << "PrefetchExtensions : " << loaded_extensions;
-
- auto extension_list = base::SplitString(loaded_extensions, ",",
- base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
- for (const auto& it : extension_list) {
- auto extension_info =
- base::SplitString(it, ":", base::TRIM_WHITESPACE, base::SPLIT_WANT_ALL);
- if (extension_info.size() != 2)
- continue;
- if (extension_info[1].find(XWALK_EXTENSION_PATH) != std::string::npos &&
- !GetUpgradableLibPath(extension_info[0]).empty()) {
- // Skip if same RO so is in upgradable list
- continue;
- }
- if (extension_info[1].find(XWALK_EXTENSION_PATH) == std::string::npos &&
- GetUpgradableLibPath(extension_info[0]).empty()) {
- // Skip if RW so is not in upgradable list
- continue;
- }
- void* dlhandle = dlopen(extension_info[1].c_str(), RTLD_LAZY);
- if (!dlhandle)
- LOG(WARNING) << extension_info[1] << " fail to load libs : " << dlerror();
- else
- prefetched_extensions_[extension_info[0]] = extension_info[1];
- }
-}
-
bool XWalkExtensionManagerTV::NeedHandleUpgradeWebapiJson() {
auto upgrade_webapis_json_path =
wrt::NativeWebRuntimeDelegateTV::GetInstance().GetUpgradeWebapiJsonPath();
private:
// XWalkExtensionManager:
void LoadExtensions(wrt::ApplicationData::AppType app_type) override;
- void CreateInstance(const std::string& name,
- CreateInstanceCallback callback) override;
- void PrefetchExtensions() override;
void PreloadExtensions() override;
void ParseUpgradableExtensions() override;
void RegisterUpgradableExtensions() override;
void SetCachedPrivileges() override;
- void UnloadExtensions() override;
std::string GetUpgradableLibPath(const std::string& name) override;
std::string HandleRuntimeMessageInternal(
const std::string& type, const std::string& value) override;
bool IsPreloadedExtension(std::string extension_name);
bool NeedHandleUpgradeWebapiJson();
bool OpenTizenCommonExntension();
- void SaveLoadedExtensions();
using ExtensionInfo = std::map<std::string, std::string>;
- ExtensionInfo loaded_extensions_;
- ExtensionInfo prefetched_extensions_;
ExtensionInfo force_update_extensions_;
ExtensionInfo system_default_extensions_;
std::map<std::string, ExtensionInfo>