+++ /dev/null
-# @file CMakeUtils.txt
-# @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com)
-# @author Pawel Sikorski (p.sikorski@samsung.com)
-# @version 1.0
-# @brief
-#
-
-#
-# Replacement functions for standard (w/o "WRT_" prefix) CMake functions.
-# They store supplied arguments in global properties to assign them to tests.
-FUNCTION(WRT_INCLUDE_DIRECTORIES)
- SET_PROPERTY(GLOBAL APPEND PROPERTY TESTS_INCLUDE_DIRS ${ARGV})
-ENDFUNCTION(WRT_INCLUDE_DIRECTORIES)
-
-FUNCTION(WRT_LINK_DIRECTORIES)
- SET_PROPERTY(GLOBAL APPEND PROPERTY TESTS_LIBRARY_DIRS ${ARGV})
-ENDFUNCTION(WRT_LINK_DIRECTORIES)
-
-FUNCTION(WRT_TARGET_LINK_LIBRARIES)
- SET(LIBS "${ARGN}")
- SET_PROPERTY(GLOBAL APPEND PROPERTY TESTS_LIBRARIES ${LIBS})
-ENDFUNCTION(WRT_TARGET_LINK_LIBRARIES)
-
-
-# Functions used to build test targets (proper sources, includes, libs are
-# added automatically)
-FUNCTION(WRT_TEST_BUILD TARGET_NAME)
- SET(SOURCES "${ARGN}")
-
- pkg_search_module(dpl-test REQUIRED dpl-test-efl)
-
- ADD_EXECUTABLE("${TARGET_NAME}"
- ${WRT_DETAIL_SOURCES}
- ${SOURCES}
- )
- INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${WRT_TESTS_INCLUDE_DIR}
- ${dpl-test_INCLUDE_DIRS}
- )
- LINK_DIRECTORIES(${COMMON_LIBRARY_DIRS})
- TARGET_LINK_LIBRARIES("${TARGET_NAME}"
- ${TARGET_ACE_DAO_RW_LIB}
- ${TARGET_WRT_DAO_RW_LIB}
- ${COMMON_LIBRARIES}
- ${TARGET_TESTS_COMMON_LIB}
- ${TARGET_PROFILING_LIB}
- ${TARGET_ACE_LIB}
- ${TARGET_ACE_CLIENT_LIB}
- ${TARGET_INSTALL_CORE_STATIC}
- ${TARGET_PLUGIN_LOADING_LIB}
- ${dpl-test_LIBRARIES}
- )
-ENDFUNCTION(WRT_TEST_BUILD)
-
-FUNCTION(WRT_TEST_INSTALL)
- SET_TARGET_PROPERTIES(${ARGV} PROPERTIES
- BUILD_WITH_INSTALL_RPATH ON
- INSTALL_RPATH_USE_LINK_PATH ON
- )
- INSTALL(TARGETS ${ARGV}
- DESTINATION bin
- PERMISSIONS OWNER_READ
- OWNER_WRITE
- OWNER_EXECUTE
- GROUP_READ
- GROUP_EXECUTE
- WORLD_READ
- WORLD_EXECUTE
- )
-ENDFUNCTION(WRT_TEST_INSTALL)
+++ /dev/null
-#CONFIGURE_FILE(${PROJECT_SOURCE_DIR}/ace_client/ace_client.pc.in ${PKGCONFIG_DIR}/wrt-ace-client.pc.in @ONLY)
-ADD_SUBDIRECTORY(src)
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file ace_client.h
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains definitions of AceThinClient API
- */
-#ifndef WRT_ACE_CLIENT_H
-#define WRT_ACE_CLIENT_H
-
-#include <dpl/noncopyable.h>
-#include <dpl/singleton.h>
-#include <dpl/exception.h>
-#include <ace_client_types.h>
-
-namespace AceClient {
-
-class AceThinClientImpl;
-
-class AceThinClient : private DPL::Noncopyable {
- public:
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, AceThinClientException)
- };
-
- bool checkFunctionCall(const AceRequest& ace_request) const;
- AcePreference getWidgetResourcePreference(
- const AceResource& resource,
- const AceWidgetHandle& handle) const;
- AceResourcesPreferences* getGlobalResourcesPreferences() const;
- bool isInitialized() const;
-
- private:
- AceThinClient();
- virtual ~AceThinClient();
-
- AceThinClientImpl* m_impl;
- friend class DPL::Singleton<AceThinClient>;
-};
-
-typedef DPL::Singleton<AceThinClient> AceThinClientSingleton;
-
-} // namespace AceClient
-
-
-#endif // WRT_ACE_CLIENT_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file ace_client_helper.h
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains definitions of AceClient helper types and
- * functions.
- */
-#ifndef WRT_ACE_CLIENT_HELPER_H
-#define WRT_ACE_CLIENT_HELPER_H
-
-#include <string>
-#include <vector>
-#include <dpl/foreach.h>
-
-#include <dpl/ace-dao-ro/IRequest.h>
-#include <dpl/ace-dao-ro/PreferenceTypes.h>
-
-#include "ace_client_types.h"
-
-namespace AceClient {
-
-AcePreference toAcePreference(AceDB::PreferenceTypes preference)
-{
- switch (preference) {
- case AceDB::PreferenceTypes::PREFERENCE_PERMIT: {
- return PREFERENCE_PERMIT; }
- case AceDB::PreferenceTypes::PREFERENCE_DENY: {
- return PREFERENCE_DENY; }
- case AceDB::PreferenceTypes::PREFERENCE_DEFAULT: {
- return PREFERENCE_DEFAULT; }
- case AceDB::PreferenceTypes::PREFERENCE_BLANKET_PROMPT: {
- return PREFERENCE_BLANKET_PROMPT; }
- case AceDB::PreferenceTypes::PREFERENCE_SESSION_PROMPT: {
- return PREFERENCE_SESSION_PROMPT; }
- case AceDB::PreferenceTypes::PREFERENCE_ONE_SHOT_PROMPT: {
- return PREFERENCE_ONE_SHOT_PROMPT; }
- }
- return PREFERENCE_DEFAULT;
-}
-
-typedef std::vector<std::string> AceParamKeys;
-typedef std::vector<std::string> AceParamValues;
-
-class AceFunctionParam
-{
- public:
- virtual ~AceFunctionParam()
- {
- }
-
- void addAttribute(const std::string& key,
- const std::string& value)
- {
- m_paramMap.insert(std::make_pair(key, value));
- }
-
- AceParamKeys getKeys() const
- {
- AceParamKeys out;
- FOREACH (it, m_paramMap) {
- out.push_back(it->first);
- }
- return out;
- }
-
- AceParamValues getValues() const
- {
- AceParamValues out;
- FOREACH (it, m_paramMap) {
- out.push_back(it->second);
- }
- return out;
- }
-
- static std::string aceFunctionParamToken;
-
- private:
- typedef std::multimap<std::string, std::string> ParamMap;
- ParamMap m_paramMap;
-};
-
-typedef std::vector <AceFunctionParam> AceFunctionParams;
-
-class AceBasicRequest : public AceDB::IRequest {
- public:
- AceBasicRequest(const AceSubject& subject,
- const AceResource& resource) :
- m_subject(subject),
- m_resource(resource)
- {
- }
-
- AceBasicRequest(const AceSubject& subject,
- const AceResource& resource,
- const AceFunctionParam& param) :
- m_subject(subject),
- m_resource(resource),
- m_param(param)
- {
- }
- virtual const std::string& getSubjectId() const
- {
- return m_subject;
- }
- virtual const std::string& getResourceId() const
- {
- return m_resource;
- }
- virtual const AceFunctionParam& getFunctionParam() const
- {
- return m_param;
- }
-
- private:
- AceSubject m_subject;
- AceResource m_resource;
- AceFunctionParam m_param;
-};
-
-typedef std::vector <AceBasicRequest> AceBasicRequests;
-
-} // namespace AceClient
-
-#endif // WRT_ACE_CLIENT_HELPER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file ace_client_types.h
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains definitions of AceClient types
- */
-#ifndef WRT_ACE_CLIENT_TYPES_H
-#define WRT_ACE_CLIENT_TYPES_H
-
-#include <string>
-#include <utility>
-#include <map>
-
-namespace AceClient {
-
-typedef int AceWidgetHandle;
-typedef void* AceJobWidgetInstallId;
-
-typedef std::string AceResource;
-typedef std::string AceSubject;
-typedef std::string AceSessionId;
-
-enum AcePreference
-{
- PREFERENCE_PERMIT,
- PREFERENCE_DENY,
- PREFERENCE_DEFAULT,
- PREFERENCE_BLANKET_PROMPT,
- PREFERENCE_SESSION_PROMPT,
- PREFERENCE_ONE_SHOT_PROMPT
-};
-
-typedef std::map<std::string, AcePreference> AceResourcesPreferences;
-typedef std::pair<std::string, AcePreference> AceResurcePreference;
-
-struct AceParam
-{
- const char *name;
- const char *value;
-
- AceParam():
- name(NULL), value(NULL)
- {}
-
- AceParam(const char *name, const char *value):
- name(name), value(value)
- {}
-};
-
-struct AceParamList
-{
- size_t count;
- AceParam* param;
- AceParamList():
- count(0),
- param(NULL)
- {}
-};
-
-struct AceDeviceCap
-{
- size_t devcapsCount;
- const char** devCapNames;
- size_t paramsCount;
- AceParamList* params;
- AceDeviceCap():
- devcapsCount(0),
- devCapNames(NULL),
- paramsCount(0),
- params(NULL)
- {}
-};
-
-struct AceApiFeatures
-{
- size_t count;
- const char** apiFeature;
- AceApiFeatures():
- count(0),
- apiFeature(NULL)
- {}
-};
-
-struct AceRequest
-{
- AceSessionId sessionId;
- AceWidgetHandle widgetHandle;
- AceApiFeatures apiFeatures;
- const char* functionName;
- AceDeviceCap deviceCapabilities;
- AceRequest():
- widgetHandle(0),
- apiFeatures(),
- functionName(NULL),
- deviceCapabilities()
- {}
-};
-
-} // namespace AceClient
-
-#endif // WRT_ACE_CLIENT_TYPES_H
+++ /dev/null
-include(FindPkgConfig)
-
-PKG_CHECK_MODULES(ACE_CLIENT_DEPS
- dpl-ace-dao-ro
- dpl-wrt-dao-ro
- dpl-ace
- dpl-efl
- dpl-event-efl
- REQUIRED
- )
-
-SET(ACE_CLIENT_DIR
- ${PROJECT_SOURCE_DIR}/ace_client
- )
-
-SET(ACE_CLIENT_SRC_DIR
- ${ACE_CLIENT_DIR}/src
- )
-
-SET(ACE_CLIENT_INCLUDE_DIR
- ${ACE_CLIENT_DIR}/include
- )
-
-SET(ACE_CLIENT_SOURCES
- ${ACE_CLIENT_SRC_DIR}/ace_client.cpp
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/api/ace_server_api.cpp
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/security_daemon_dbus_config.cpp
- ${PROJECT_SOURCE_DIR}/src/rpc/ui-process/rpc_client.cpp
- ${PROJECT_SOURCE_DIR}/src/rpc/ui-process/fake_rpc_connection.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/simple_roaming_agent.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/attribute_facade.cpp
- ${PROJECT_SOURCE_DIR}/src/popup-process/PopupInvoker.cpp
- ${PROJECT_SOURCE_DIR}/src/popup-process/PopupSerializer.cpp
- )
-
-SET(ACE_CLIENT_INCLUDES
- ${ACE_CLIENT_DEPS_INCLUDE_DIRS}
- ${ACE_CLIENT_INCLUDE_DIR}
- ${PROJECT_SOURCE_DIR}/src/orm/ # WRT ORM
- ${PROJECT_SOURCE_DIR}/src/configuration/ # WidgetDAO
- ${PROJECT_SOURCE_DIR}/src/dbus/ # DBus client
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/ # Security daemon config
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/api/ # AceServerApi
- ${PROJECT_SOURCE_DIR}/src/rpc/ui-process/ # RPC connection
- ${PROJECT_SOURCE_DIR}/src/common/ # Nested Loop
- ${PROJECT_SOURCE_DIR}/src/dbus/ # DBus client
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/ # Security daemon config
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/api/ # AceServerApi
- ${PROJECT_SOURCE_DIR}/src/domain/ # widget_data_types
- ${PROJECT_SOURCE_DIR}/src/common/ # wrt_db_types
- ${PROJECT_SOURCE_DIR}/src/profiling/ # profiling
- ${PROJECT_SOURCE_DIR}/src/localization # localization
- ${PROJECT_SOURCE_DIR}/src/access-control/ # simple_roaming_agent.h
- ${PROJECT_SOURCE_DIR}/src/popup-process/ # Popup Invoker
- )
-
-ADD_DEFINITIONS(${ACE_CLIENT_DEPS_CFLAGS})
-ADD_DEFINITIONS(${ACE_CLIENT_CFLAGS_OTHER})
-
-INCLUDE_DIRECTORIES(${ACE_CLIENT_INCLUDES})
-
-ADD_LIBRARY(${TARGET_ACE_CLIENT_LIB} SHARED ${ACE_CLIENT_SOURCES})
-
-SET_TARGET_PROPERTIES(${TARGET_ACE_CLIENT_LIB} PROPERTIES
- SOVERSION ${PROJECT_VERSION})
-
-SET_TARGET_PROPERTIES(${TARGET_ACE_CLIENT_LIB} PROPERTIES
- COMPILE_FLAGS -fPIC)
-
-TARGET_LINK_LIBRARIES(${TARGET_ACE_CLIENT_LIB}
- ${ACE_CLIENT_DEPS_LIBRARIES}
- ${TARGET_ACE_DAO_RO_LIB}
- ${TARGET_WRT_DAO_RO_LIB}
- ${PROF_LIB}
- )
-
-INSTALL(TARGETS ${TARGET_ACE_CLIENT_LIB}
- DESTINATION lib
- PERMISSIONS OWNER_READ GROUP_READ WORLD_READ
- )
-
-INSTALL(FILES
- ${ACE_CLIENT_INCLUDE_DIR}/ace_client.h
- ${ACE_CLIENT_INCLUDE_DIR}/ace_client_types.h
- DESTINATION include/wrt-engine/ace-client
- )
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file ace_client.cpp
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains implementation of AceThinClient class
- */
-
-#include <memory>
-
-#include <dpl/optional_typedefs.h>
-#include <dpl/singleton.h>
-#include <dpl/log/log.h>
-#include <dpl/singleton_impl.h>
-#include <dpl/ace-dao-ro/PromptModel.h>
-
-#include "ace_server_api.h"
-#include "security_daemon_dbus_config.h"
-#include "popup_ace_data_types.h"
-
-#include "ace_client.h"
-#include "ace_client_helper.h"
-#include <attribute_facade.h>
-
-#include <dpl/ace/Request.h>
-
-#include "profiling_util.h"
-
-#define DIRECT_POPUP_CALL
-
-// ACE tests need to use mock implementations
-#ifdef ACE_CLIENT_TESTS
-
-#ifdef DIRECT_POPUP_CALL
-#include "popup_response_service_api.h"
-#include <popup_response_service/popup_response_service_config.h>
-#include "PopupInvoker_mock.h"
-#endif
-
-#include "widget_dao_read_only_mock.h"
-#include "WrtDatabase_mock.h"
-#include "AceDAOReadOnly_mock.h"
-#include "dbus_client_mock.h"
-#include "PolicyInformationPoint_mock.h"
-#include "rpc_client_mock.h"
-
-#else
-
-#ifdef DIRECT_POPUP_CALL
-#include "popup_response_service_api.h"
-#include <popup_response_service/popup_response_service_config.h>
-#include "PopupInvoker.h"
-#endif
-
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-#include <dpl/wrt-dao-ro/WrtDatabase.h>
-#include <dpl/ace-dao-ro/AceDAOReadOnly.h>
-#include <dpl/dbus/dbus_client.h>
-#include <dpl/ace/PolicyInformationPoint.h>
-#include "rpc_client.h"
-
-#endif // ACE_CLIENT_TESTS
-
-IMPLEMENT_SINGLETON(AceClient::AceThinClient)
-
-namespace AceClient {
-
-std::string AceFunctionParam::aceFunctionParamToken = "param:function";
-
-// popup cache result
-
-enum class AceCachedPromptResult {
- PERMIT,
- DENY,
- ASK_POPUP
-};
-
-// AceThinClient implementation singleton
-class AceThinClientImpl {
- public:
- bool checkFunctionCall(const AceRequest& ace_request);
- AcePreference getWidgetResourcePreference(
- const AceResource& resource,
- const AceWidgetHandle& handle) const;
- AceResourcesPreferences* getGlobalResourcesPreferences() const;
- bool isInitialized() const;
-
- void popupClientInitialized(const UIProcess::AcceptingCallsEvent& event);
-
- AceThinClientImpl();
- ~AceThinClientImpl();
-
- private:
- DPL::DBus::Client* m_dbusClient;
- std::unique_ptr<UIProcess::RpcClient> m_popupClient;
- bool m_popupClientInitialized;
-
- AceSubject getSubjectForHandle(AceWidgetHandle handle) const;
- AceCachedPromptResult getCachedPromptResult(
- const AceDB::BaseAttributeSet &attributes,
- const std::string& userParam,
- const AceSessionId& sessionId) const;
- bool askUser(PolicyEffect popupType,
- const AceRequest& ace_request,
- const AceBasicRequest& request);
-#ifdef DIRECT_POPUP_CALL
- DPL::ScopedPtr<DPL::DBus::Client> m_dbusPopupClient;
- bool securityDaemonCall(bool allowed,
- Prompt::Validity valid,
- const AceUserdata &data);
-#endif //DIRECT_POPUP_CALL
- mutable PolicyInformationPoint m_pip;
- DPL::Optional<std::set<DPL::String>> grantedDevCaps;
-};
-
-AceThinClientImpl::AceThinClientImpl()
- : m_dbusClient(NULL),
- m_popupClientInitialized(false),
- m_pip(new WebRuntimeImpl(),
- new ResourceInformationImpl(),
- new OperationSystemImpl())
-{
- AceDB::AceDAOReadOnly::attachToThread();
- WrtDB::WrtDatabase::attachToThread();
- Try {
- m_dbusClient = new DPL::DBus::Client(
- RPC::SecurityDaemonConfig::OBJECT_PATH,
- RPC::SecurityDaemonConfig::SERVICE_NAME,
- RPC::AceServerApi::INTERFACE_NAME);
- std::string hello = "RPC test.";
- std::string response;
- m_dbusClient->call(RPC::AceServerApi::ECHO_METHOD,
- hello,
- &response);
- LogInfo("Security daemon response from echo: " << response);
- } Catch (DPL::DBus::Client::Exception::DBusClientException) {
- ReThrowMsg(AceThinClient::Exception::AceThinClientException,
- "Failed to call security daemon");
- }
-
- using namespace UIProcess;
- //popupClientInitialized will be initialized when callback will be invoked
- m_popupClient.reset(new RpcClient());
- m_popupClient->DPL::Event::EventSupport<AcceptingCallsEvent>::AddListener(
- DPL::MakeDelegate(this, &AceThinClientImpl::popupClientInitialized));
-}
-
-AceThinClientImpl::~AceThinClientImpl()
-{
- Assert(NULL != m_dbusClient);
- delete m_dbusClient;
- m_dbusClient = NULL;
- m_popupClient.reset();
- m_popupClientInitialized = false;
- WrtDB::WrtDatabase::detachFromThread();
- AceDB::AceDAOReadOnly::detachFromThread();
-}
-
-bool AceThinClientImpl::isInitialized() const
-{
- return NULL != m_dbusClient;
-}
-
-void AceThinClientImpl::popupClientInitialized(
- const UIProcess::AcceptingCallsEvent& /*event*/)
-{
- LogInfo("Popup client was initialized");
- m_popupClientInitialized = true;
-//FIXME what if uninitialized client is being called?
-}
-
-bool AceThinClientImpl::checkFunctionCall(const AceRequest& ace_request)
-{
- ADD_PROFILING_POINT("Check_function_call", "start");
-
- LogInfo("Enter");
-
- // fill the grantedDevCaps, if not yet initialized
- // TODO: This is not so pretty. AceThinClient is not explicitly
- // tied to a widget handle, yet we assume it is always used
- // with the same handle. This will be amended in a future
- // refactoring (already planned).
- if (grantedDevCaps.IsNull()) {
- grantedDevCaps = std::set<DPL::String>();
- AceDB::AceDAOReadOnly::getStaticDevCapPermissions(
- ace_request.widgetHandle, &*grantedDevCaps);
- }
-
- AceSubject subject = getSubjectForHandle(ace_request.widgetHandle);
-
- // Create function params
- const AceDeviceCap& devcaps = ace_request.deviceCapabilities;
- AceFunctionParams functionParams(devcaps.devcapsCount);
- for (size_t i = 0; i < devcaps.devcapsCount; ++i) {
- AceFunctionParam functionParam;
- functionParam.addAttribute(AceFunctionParam::aceFunctionParamToken,
- NULL == ace_request.functionName ?
- "" : ace_request.functionName);
- if (devcaps.paramsCount) {
- Assert(devcaps.params);
- for (size_t j = 0; j < devcaps.params[i].count; ++j) {
- Assert(devcaps.params[i].param &&
- devcaps.params[i].param[j].name &&
- devcaps.params[i].param[j].value);
- functionParam.addAttribute(
- std::string(devcaps.params[i].param[j].name),
- std::string(devcaps.params[i].param[j].value));
- }
- }
- functionParams.push_back(functionParam);
- }
-
- // Convert AceRequest to array of AceBasicRequests
- AceBasicRequests requests;
-
- for (size_t i = 0; i < devcaps.devcapsCount; ++i) {
- // Adding dev cap name here as resource id
- Assert(devcaps.devCapNames[i]);
- LogInfo("Device cap: " << devcaps.devCapNames[i]);
- AceBasicRequest request(subject,
- devcaps.devCapNames[i],
- functionParams[i]);
- requests.push_back(request);
- }
- // true means access granted, false - denied
- bool result = true;
-
- FOREACH(it, requests){
- // Getting attributes from ACE DAO
- AceBasicRequest& request = *it;
- AceDB::BaseAttributeSet attributeSet;
- AceDB::AceDAOReadOnly::getAttributes(&attributeSet);
-
- // If true, we need to make popup IPC and ask user for decision
- bool askPopup = false;
- // If true, we need to make IPC to security daemon for policy
- // decision on granting access
- bool askServer = false;
- // If askPopup == true, this is the kind of popup to be opened
- PolicyEffect popupType = PolicyEffect::PROMPT_ONESHOT;
-
- if (attributeSet.empty()) {
- // Treat this case as missed cache - ask security daemon
- LogInfo("Empty attribute set");
- askServer = true;
- } else {
- // Filling attributes with proper values
- Request req(ace_request.widgetHandle,
- WidgetExecutionPhase_Unknown);
- req.addDeviceCapability(request.getResourceId());
-
- m_pip.getAttributesValues(&req, &attributeSet);
-
- // Getting cached policy result
- OptionalPolicyResult policyResult =
- AceDB::AceDAOReadOnly::getPolicyResult(attributeSet);
-
- if (policyResult.IsNull()) {
- // Missed cache - ask security daemon
- LogInfo("Missed policy result cache");
- askServer = true;
- } else {
- // Cached value found - now interpret it
- LogInfo("Result in cache");
- OptionalPolicyEffect effect = (*policyResult).getEffect();
- if (effect.IsNull()) {
- // PolicyDecision is UNDETERMINED or NOT_APPLICABLE
- result = false;
- break;
- } else if (*effect == PolicyEffect::DENY) {
- // Access denied
- result = false;
- break;
- } else if (*effect == PolicyEffect::PERMIT) {
- // Access granted
- if (grantedDevCaps->find(
- DPL::FromASCIIString(request.getResourceId()))
- != grantedDevCaps->end())
- {
- continue;
- } else
- askServer = true;
- } else {
- // Check for cached popup response
- LogInfo("Checking cached popup response");
- AceCachedPromptResult promptCached =
- getCachedPromptResult(attributeSet,
- ace_request.sessionId,
- ace_request.sessionId);
- if (promptCached == AceCachedPromptResult::PERMIT) {
- // Granted by previous popup
- if (grantedDevCaps->find(
- DPL::FromASCIIString(request.getResourceId()))
- != grantedDevCaps->end())
- {
- continue;
- } else
- askServer = true;
- }
- if (promptCached == AceCachedPromptResult::DENY) {
- // Access denied by earlier popup
- result = false;
- break;
- }
- if (promptCached == AceCachedPromptResult::ASK_POPUP) {
- askPopup = true;
- popupType = *effect;
- }
- }
- }
- }
-
- if (askServer) {
- // IPC to security daemon
- // here we must check if we have a SMACK permission for
- // the device cap requested
- LogInfo("Asking security daemon");
- int serializedPolicyResult = 0;
- Try {
- m_dbusClient->call(RPC::AceServerApi::CHECK_ACCESS_METHOD,
- ace_request.widgetHandle,
- request.getSubjectId(),
- request.getResourceId(),
- request.getFunctionParam().getKeys(),
- request.getFunctionParam().getValues(),
- &serializedPolicyResult);
- } Catch (DPL::DBus::Client::Exception::DBusClientException) {
- ReThrowMsg(AceThinClient::Exception::AceThinClientException,
- "Failed to call security daemon");
- }
- PolicyResult policyResult = PolicyResult::
- deserialize(serializedPolicyResult);
- OptionalPolicyEffect effect = policyResult.getEffect();
- if (effect.IsNull()) {
- // PolicyDecision is UNDETERMINED or NOT_APPLICABLE
- result = false;
- break;
- }
- if (*effect == PolicyEffect::DENY) {
- // Access denied
- result = false;
- break;
- }
- if (*effect == PolicyEffect::PERMIT) {
- // Access granted, move on to next request
- grantedDevCaps->insert(
- DPL::FromASCIIString(request.getResourceId()));
-
- continue;
- }
- // Policy says: ask user - setup popup kind
- popupType = *effect;
- askPopup = true;
- }
-
- if (askPopup) {
- result = askUser(popupType, ace_request, request);
- }
- }
- LogInfo("Result: " << (result ? "GRANTED" : "DENIED"));
-
- ADD_PROFILING_POINT("Check_function_call", "stop");
-
- return result;
-}
-bool AceThinClientImpl::askUser(PolicyEffect popupType,
- const AceRequest& ace_request,
- const AceBasicRequest& request)
-{
- bool result = true;
- LogInfo("Asking popup");
-// We do not use rpc client popup in current implementation.
-// Assert(m_popupClientInitialized && "Client was not initialized");
-
- switch(popupType) {
- //these case statements without break are made on purpose
- case PolicyEffect::PROMPT_ONESHOT:
- case PolicyEffect::PROMPT_SESSION:
- case PolicyEffect::PROMPT_BLANKET: {
- AceUserdata aceData;
- aceData.handle = ace_request.widgetHandle;
- aceData.subject = request.getSubjectId();
- aceData.resource = request.getResourceId();
- aceData.paramKeys = request.getFunctionParam().getKeys();
- aceData.paramValues = request.getFunctionParam().getValues();
- // TODO what about session ??
-
-#ifdef DIRECT_POPUP_CALL
- //Calling Popup process directly!
- Prompt::PromptAnswer response = PopupInvoker().showSyncPopup(
- static_cast<int>(popupType),
- aceData.resource);
-
- LogDebug("Answer: " << response.isAccessAllowed());
-
- //ASK SECURITY DAEMON
- if (!response.isAccessAllowed() &&
- Prompt::Validity::ONCE == response.getValidity())
- {
- LogInfo("User answer is DENY ONCE. Don't call security daemon");
- }
- else
- {
- LogInfo("calling security daemon");
- bool securityResponse =
- securityDaemonCall(response.isAccessAllowed(),
- response.getValidity(),
- aceData);
-
- if(!securityResponse)
- {
- LogError("Security Daemon has responded with false!");
- return false;
- }
- LogInfo("Security Daemon has responded with true");
- }
-#endif //DIRECT_POPUP_CALL
-
- //Calling popup process via RPC
-// UIProcess::UniquePopupResponsePtr response =
-// m_popupClient->showSyncPopup(
-// popupType,
-// aceData);
-
- if (response.isAccessAllowed())
- grantedDevCaps->insert(
- DPL::FromASCIIString(request.getResourceId()));
-
- //TODO add answer
- result = response.isAccessAllowed();
- break; }
- default:
- LogError("Unknown popup type passed!");
- LogError("Maybe effect isn't a popup?");
- LogError("Effect number is: " << static_cast<int>(popupType));
- Assert(0);
- }
-
- return result;
-}
-
-#ifdef DIRECT_POPUP_CALL
-bool AceThinClientImpl::securityDaemonCall(bool allowed,
- Prompt::Validity valid,
- const AceUserdata &data)
-{
- if(!m_dbusPopupClient)
- m_dbusPopupClient.Reset(new DPL::DBus::Client(
- RPC::SecurityDaemonConfig::OBJECT_PATH,
- RPC::SecurityDaemonConfig::SERVICE_NAME,
- RPC::PopupResponseServiceApi::getInterfaceName()));
-
- bool response = false;
- Try {
- m_dbusPopupClient->call(
- RPC::PopupResponseServiceApi::getValidationMethodName(),
- allowed,
- static_cast<int>(valid),
- data.handle,
- data.subject,
- data.resource,
- data.paramKeys,
- data.paramValues,
- data.session,
- &response);
- } Catch (DPL::DBus::Client::Exception::DBusClientException) {
- ReThrowMsg(AceThinClient::Exception::AceThinClientException,
- "Failed to call security daemon");
- }
-
- return response;
-}
-#endif //DIRECT_POPUP_CALL
-
-AcePreference AceThinClientImpl::getWidgetResourcePreference (
- const AceResource& resource,
- const AceWidgetHandle& handle) const
-{
- return toAcePreference(
- AceDB::AceDAOReadOnly::getWidgetDevCapSetting(resource, handle));
-}
-
-AceResourcesPreferences* AceThinClientImpl::getGlobalResourcesPreferences()
-const
-{
- AceDB::PreferenceTypesMap globalSettingsMap;
- AceResourcesPreferences* acePreferences = new AceResourcesPreferences();
- AceDB::AceDAOReadOnly::getDevCapSettings(&globalSettingsMap);
- FOREACH(it, globalSettingsMap) {
- acePreferences->insert(
- AceResurcePreference((*it).first,
- toAcePreference((*it).second)));
- }
- return acePreferences;
-}
-
-AceSubject AceThinClientImpl::getSubjectForHandle(AceWidgetHandle handle) const
-{
- // TODO remove subject use in AceRequest
- // remove dependency AceThinClient and WrtDaoRo from CMakeLists.txt
- WrtDB::WidgetDAOReadOnly w_dao(handle);
- try {
- DPL::OptionalString widgetGUID = w_dao.getGUID();
- return !widgetGUID ? "" : DPL::ToUTF8String(*widgetGUID);
- }
- catch (WrtDB::WidgetDAOReadOnly::Exception::WidgetNotExist& /*ex*/)
- {
- LogError("Couldn't find GIUD for handle " << handle);
- return "";
- }
-}
-
-AceCachedPromptResult AceThinClientImpl::getCachedPromptResult(
- const AceDB::BaseAttributeSet &attributes,
- const std::string& userParam,
- const AceSessionId& sessionId) const
-{
- OptionalCachedPromptDecision promptDecision =
- AceDB::AceDAOReadOnly::getPromptDecision(
- attributes,
- userParam);
- if (promptDecision.IsNull()) {
- return AceCachedPromptResult::ASK_POPUP;
- } else {
- // These should not be stored in DB!
- Assert(PromptDecision::ALLOW_THIS_TIME
- != (*promptDecision).decision);
- Assert(PromptDecision::DENY_THIS_TIME
- != (*promptDecision).decision);
- if ((*promptDecision).decision ==
- PromptDecision::ALLOW_ALWAYS) {
- // Access granted via earlier popup
- return AceCachedPromptResult::PERMIT;
- }
- if ((*promptDecision).decision ==
- PromptDecision::DENY_ALWAYS) {
- // Access denied via earlier popup
- return AceCachedPromptResult::DENY;
- }
- // Only thing left is per session prompts
- if ((*promptDecision).session.IsNull()) {
- return AceCachedPromptResult::ASK_POPUP;
- }
- AceSessionId cachedSessionId = DPL::ToUTF8String(*((*promptDecision).session));
- if ((*promptDecision).decision ==
- PromptDecision::ALLOW_FOR_SESSION) {
- if (cachedSessionId == sessionId) {
- // Access granted for this session.
- return AceCachedPromptResult::PERMIT;
- } else {
- return AceCachedPromptResult::ASK_POPUP;
- }
- }
- if ((*promptDecision).decision ==
- PromptDecision::DENY_FOR_SESSION) {
- if (cachedSessionId == sessionId) {
- // Access denied for this session.
- return AceCachedPromptResult::DENY;
- } else {
- return AceCachedPromptResult::ASK_POPUP;
- }
- }
- }
- return AceCachedPromptResult::ASK_POPUP;
-}
-
-// AceThinClient
-
-bool AceThinClient::checkFunctionCall(
- const AceRequest& ace_request) const
-{
-#ifdef WRT_SKIP_ACE_SUPPORT
- // simulation of compromised process
- struct Internal {
- static bool checkEnv() {
- char *str = getenv("WRT_SKIP_ACE");
- if (str)
- return !strncmp("1", str, 1);
- return false;
- }
- };
- static bool skip = Internal::checkEnv();
- if (skip)
- return true;
-#endif
- return m_impl->checkFunctionCall(ace_request);
-}
-
-AcePreference AceThinClient::getWidgetResourcePreference(
- const AceResource& resource,
- const AceWidgetHandle& handle) const
-{
- return m_impl->getWidgetResourcePreference(
- resource, handle);
-}
-
-AceResourcesPreferences* AceThinClient::getGlobalResourcesPreferences()
-const
-{
- return m_impl->getGlobalResourcesPreferences();
-}
-
-AceThinClient::AceThinClient()
-{
- m_impl = new AceThinClientImpl();
-}
-
-AceThinClient::~AceThinClient()
-{
- Assert(NULL != m_impl);
- delete m_impl;
-}
-
-bool AceThinClient::isInitialized() const
-{
- return NULL != m_impl && m_impl->isInitialized();
-}
-
-
-} // namespace AceClient
+++ /dev/null
-cmake_minimum_required(VERSION 2.6)
-project(ace-thin-client-example)
-
-include(FindPkgConfig)
-
-pkg_check_modules(DEPS
- dpl-efl
- REQUIRED)
-
-pkg_search_module(wrt-ace-client REQUIRED wrt-ace-client)
-
-set(TARGET_NAME "ace-thin-client-example")
-
-set(SRCS
- ace-thin-client-example.cpp)
-
-include_directories(${DEPS_INCLUDE_DIRS})
-include_directories(${wrt-ace-client_INCLUDE_DIRS})
-
-add_definitions("-DDPL_LOGS_ENABLED")
-
-add_executable(${TARGET_NAME} ${SRCS})
-
-target_link_libraries(${TARGET_NAME}
- ${DEPS_LDFLAGS}
- ${wrt-ace-client_LDFLAGS})
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace-thin-client-example.cpp
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief Example usage of ACE thin client.
- */
-
-#include <ace_client.h>
-
-int main(int argc, char **argv)
-{
- AceClient::AceThinClient& client =
- AceClient::AceThinClientSingleton::Instance();
- client.initialize(); // this fires echo method - see logs
- client.deinitialize();
- return 0;
-}
-
+++ /dev/null
-@PREFIX@/include/*
-@PREFIX@/lib/pkgconfig/*
+++ /dev/null
-/usr/bin/wrt-tests-*
-#/usr/bin/wrt_dao_tests_prepare_db.sh
-##/usr/apps/org.tizen.policy/bin/*
-##/usr/apps/org.tizen.policy/bin/unittests
-##/usr/apps/org.tizen.policy/bin/policyut
-##/usr/apps/org.tizen.policy/bin/signer
-##/usr/apps/org.tizen.policy/signer/*
-#/usr/etc/ace/at*
-#/usr/etc/ace/p*
-#/usr/etc/ace/g*
-#/usr/etc/ace/u*
-#/usr/etc/ace/i*
-#/usr/etc/ace/smack-test.xml
-#/usr/etc/ace/CMTest/*
-##/usr/etc/ace/SignerTests/*
-##/usr/etc/ace/PolicyUpdateTests/*
-/opt/apps/widget/tests/w3c_widgets/*
-#/opt/apps/widget/tests/vcore*
-#/opt/apps/widget/tests/widget_module/*
-#/opt/apps/widget/user/tests/*
-#/opt/apps/widget/user/smack/*
-#/usr/lib/libwrt-engine-tests-lib.so.*
+++ /dev/null
-#!/bin/sh
-
-sqlite3 /opt/dbspace/.wrt.db "delete from featureslist where FeatureUUID=666;"
-sqlite3 /opt/dbspace/.wrt.db "delete from pluginproperties where PluginPropertiesId=666;"
-sqlite3 /opt/dbspace/.wrt.db "insert into featureslist(FeatureUUID, FeatureName, PluginPropertiesId) VALUES(666, 'feature:a9bb79c1', 666);"
-sqlite3 /opt/dbspace/.wrt.db "insert into pluginproperties(PluginPropertiesId, PluginLibraryName) VALUES(666, 'plugin:forfeaturea9bb79c1')"
-
-sqlite3 /opt/dbspace/.wrt.db "delete from featureslist where FeatureUUID=777;"
-sqlite3 /opt/dbspace/.wrt.db "delete from pluginproperties where PluginPropertiesId=777;"
-sqlite3 /opt/dbspace/.wrt.db "insert into pluginproperties(PluginPropertiesId, PluginLibraryName) VALUES(777, 'plugin:forfeaturexbugusfeature')"
-sqlite3 /opt/dbspace/.wrt.db "insert into featureslist(FeatureUUID, FeatureName, PluginPropertiesId) VALUES(777, 'feature:x-bugus-feature', 777);"
-
-#echo "Copying ROOT CA certificate for wrt-engine-tests test-suite."
-#cp /opt/apps/widget/tests/vcore_keys/root_cacert.pem /opt/share/cert-svc/certs/code-signing/wac/
-#echo "Copying ROOT CA certificate for developer mode tests."
-#cp /opt/apps/widget/tests/vcore_keys/operator.root.cert.pem /opt/share/cert-svc/certs/code-signing/wac/
-
-# The following .pem files are not used in wrt-test. test code regarding these .pem files have been moved to wrt-extra repository (private git)
-
-#echo "Copying ROOT CA certificate for W3C DIGITAL SIGNATURE test-suite."
-#cp /opt/apps/widget/tests/w3c_certificates/root.cert.pem /opt/share/cert-svc/certs/code-signing/wac/
-
-#echo "Copying ROOT CA certificate for wac tests."
-#cp /opt/apps/widget/user/wactests/demoCA/cacert.pem /opt/share/cert-svc/certs/code-signing/wac/test.root.cacert.pem
+++ /dev/null
-#!/bin/sh
-
-mkdir -p /opt/apps/widget/system
-mkdir -p /opt/apps/widget/user
-mkdir -p /opt/apps/widget/exec
-mkdir -p /opt/apps/widget/data/Public
-mkdir -p /usr/lib/wrt-plugins
-
-#vconf --- register WRT
-/usr/bin/vconftool set -t string db/webruntime/vendor "Samsung" -f
-/usr/bin/vconftool set -t string db/webruntime/name "WebRuntime" -f
-/usr/bin/vconftool set -t string db/webruntime/version "1.0.0.0" -f
-/usr/bin/vconftool set -t string db/webruntime/api "W3C WAC1.0 WAC2.0" -f
-
-echo "[WRT] wrt postinst done ..."
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 0.1
- * @brief ACE DAO read only mockup class
- */
-#include "AceDAOReadOnly_mock.h"
-
-namespace AceDB {
-OptionalPolicyResult AceDAOReadOnly::m_policyResult = OptionalPolicyResult();
-OptionalCachedPromptDecision AceDAOReadOnly::m_promptDecision =
- OptionalCachedPromptDecision();
-PreferenceTypes AceDAOReadOnly::m_devCapSetting =
- PreferenceTypes::PREFERENCE_DEFAULT;
-PreferenceTypes AceDAOReadOnly::m_widgetDevCapSetting =
- PreferenceTypes::PREFERENCE_DEFAULT;
-PreferenceTypesMap AceDAOReadOnly::m_devCapSettings = PreferenceTypesMap();
-BaseAttributeSet AceDAOReadOnly::m_attributeSet = BaseAttributeSet();
-BasePermissionList AceDAOReadOnly::m_widgetDevCapSettings = BasePermissionList();
-std::set<DPL::String> AceDAOReadOnly::m_devCapPermissions =
- std::set<DPL::String>();
-};
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 0.1
- * @brief ACE DAO read only mockup class
- */
-
-#ifndef WRT_MOCKUPS_ACE_DAO_READ_ONLY_MOCK_H_
-#define WRT_MOCKUPS_ACE_DAO_READ_ONLY_MOCK_H_
-
-#include <set>
-
-#include <openssl/md5.h>
-#include <dpl/exception.h>
-#include <dpl/string.h>
-
-#include <PreferenceTypes.h>
-#include <BaseAttribute.h>
-#include <BasePermission.h>
-#include <IRequest.h>
-#include <PolicyEffect.h>
-#include <PolicyResult.h>
-#include <PromptDecision.h>
-#include <wrt_db_types.h>
-
-namespace AceDB {
-
-class AceDAOReadOnly
-{
- public:
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, DatabaseError)
- };
-
- AceDAOReadOnly() {}
-
- static void attachToThread(){};
- static void detachFromThread(){};
-
- // policy effect/decision
- static OptionalPolicyResult getPolicyResult(
- const BaseAttributeSet &/*attributes*/)
- {
- return m_policyResult;
- }
-
- // prompt decision
- static OptionalCachedPromptDecision getPromptDecision(
- const std::string &/*hash*/,
- const std::string &/*userParam*/)
- {
- return m_promptDecision;
- }
- static OptionalCachedPromptDecision getPromptDecision(
- const BaseAttributeSet &/*attributes*/,
- const std::string &/*userParam*/)
- {
- return m_promptDecision;
- }
-
- // resource settings
- static PreferenceTypes getDevCapSetting(const std::string &/*resource*/)
- {
- return m_devCapSetting;
- }
- static void getDevCapSettings(PreferenceTypesMap *preferences)
- {
- *preferences = m_devCapSettings;
- }
-
- // user settings
- static void getWidgetDevCapSettings(BasePermissionList *permissions)
- {
- *permissions = m_widgetDevCapSettings;
- }
-
- static PreferenceTypes getWidgetDevCapSetting(
- const std::string &/*resource*/,
- WidgetHandle /*handler*/)
- {
- return m_widgetDevCapSetting;
- }
-
- static void getAttributes(BaseAttributeSet *attributes)
- {
- *attributes = m_attributeSet;
- }
-
- // static dev cap permissions
- //
- // (For a given widget handle, a set of device caps is
- // granted "statically", i.e. it is determined at installation
- // time that the widget will always get (at launch) the SMACK
- // permissions needed to use those device caps).
- //
- // 'permissions' is an output parameter - it must point to
- // an existing set and the function will clear it and fill
- // with the device cap names as described.
- static void getStaticDevCapPermissions(
- int /*widgetHandle*/,
- std::set<DPL::String> *permissions)
- {
- *permissions = m_devCapPermissions;
- }
-
- // Setting return values for mockups
- static void setPolicyResult(OptionalPolicyResult value)
- {
- m_policyResult = value;
- }
-
- static void setPromptDecision(OptionalCachedPromptDecision value)
- {
- m_promptDecision = value;
- }
-
- static void setDevCapSetting(PreferenceTypes value)
- {
- m_devCapSetting = value;
- }
-
- static void setWidgetDevCapSetting(PreferenceTypes value)
- {
- m_widgetDevCapSetting = value;
- }
-
- static void setWidgetDevCapSettings(BasePermissionList value)
- {
- m_widgetDevCapSettings = value;
- }
-
- static void setDevCapSettings(PreferenceTypesMap value)
- {
- m_devCapSettings = value;
- }
-
- static void setAttributeSet(BaseAttributeSet value)
- {
- m_attributeSet = value;
- }
-
- static void setDevCapPermissions(std::set<DPL::String> value)
- {
- m_devCapPermissions = value;
- }
-
- protected:
- static OptionalPolicyResult m_policyResult;
- static OptionalCachedPromptDecision m_promptDecision;
- static PreferenceTypes m_devCapSetting;
- static PreferenceTypes m_widgetDevCapSetting;
- static PreferenceTypesMap m_devCapSettings;
- static BaseAttributeSet m_attributeSet;
- static BasePermissionList m_widgetDevCapSettings;
- static std::set<DPL::String> m_devCapPermissions;
-};
-
-}
-
-#endif // WRT_MOCKUPS_ACE_DAO_READ_ONLY_MOCK_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief PolicyInformationPoint mockup class
- */
-#ifndef WRT_MOCKUPS_POLICY_INFORMATION_POINT_MOCK_H_
-#define WRT_MOCKUPS_POLICY_INFORMATION_POINT_MOCK_H_
-
-class PolicyInformationPoint {
- public:
- PolicyInformationPoint(void*, void*, void*){};
- virtual ~PolicyInformationPoint(){};
- void getAttributesValues(void*, void*){};
-
-};
-
-#endif // WRT_MOCKUPS_POLICY_INFORMATION_POINT_MOCK_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file PopupInvoker_mock.cpp
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- */
-
-#include "PopupInvoker_mock.h"
-
-Prompt::PromptAnswer PopupInvoker::m_answer(true, Prompt::Validity::ALWAYS);
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file PopupInvoker_mock.h
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- */
-
-#ifndef WRT_SRC_MOCKUPS_POPUP_INVOKER_H
-#define WRT_SRC_MOCKUPS_POPUP_INVOKER_H
-
-#include <dpl/ace-dao-ro/PromptModel.h>
-
-#include <string>
-
-class PopupInvoker
-{
-public:
- PopupInvoker(){};
- ~PopupInvoker(){};
-
- Prompt::PromptAnswer showSyncPopup(int /*popupType*/,
- const std::string &/*resource*/)
- {
- return m_answer;
- }
-
- static void setPromptAnswer(Prompt::PromptAnswer value)
- {
- m_answer = value;
- }
-private:
- static Prompt::PromptAnswer m_answer;
-};
-
-#endif // WRT_SRC_MOCKUPS_POPUP_INVOKER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains simple mockup of WrtDatabase class.
- */
-#ifndef WRT_MOCUPS_CONFIGURATION_WRTDATABASE_MOCK_H_
-#define WRT_MOCUPS_CONFIGURATION_WRTDATABASE_MOCK_H_
-
-namespace WrtDB {
-
-class WrtDatabase
-{
- public:
- static void attachToThread(){};
- static void detachFromThread(){};
-};
-
-}
-
-#endif /* WRT_MOCUPS_CONFIGURATION_WRTDATABASE_H_ */
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief DBus client mockup class.
- */
-#include "dbus_client_mock.h"
-
-namespace DPL {
-namespace DBus {
- int Client::m_checkAccessResult = 0;
- bool Client::m_daemonValidationResult = true;
-}
-};
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief DBus client mockup class.
- */
-
-#ifndef WRT_MOCKUPS_DBUS_CLIENT_MOCK_H_
-#define WRT_MOCKUPS_DBUS_CLIENT_MOCK_H_
-
-#include <dpl/exception.h>
-#include <dpl/assert.h>
-
-#include <string>
-#include <vector>
-#include "ace_server_api.h"
-#include "popup_response_service_api.h"
-
-namespace DPL {
-namespace DBus {
-
-/*
- * This class is a mockup implementation for some methods called
- * with DBus::Client.
- */
-
-class Client
-{
-
- public:
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, DBusClientException)
- };
-
- Client(std::string /*serverPath*/,
- std::string /*serviceName*/,
- std::string /*interfaceName*/)
- {
- }
-
- // ACE server api echo method
- void call(const std::string &methodName,
- const std::string &inArg,
- std::string* outArg)
- {
- if (methodName == RPC::AceServerApi::ECHO_METHOD) {
- Assert(NULL != outArg);
- *outArg = inArg;
- return;
- }
- }
-
- // ACE server api check access method
- void call(const std::string &methodName,
- int,
- const std::string&,
- const std::string&,
- const std::vector<std::string>&,
- const std::vector<std::string>&,
- int* outArg)
- {
- if (methodName == RPC::AceServerApi::CHECK_ACCESS_METHOD) {
- Assert(NULL != outArg);
- *outArg = m_checkAccessResult;
- return;
- }
- }
-
- // Security daemon validation method
- void call(const std::string &methodName,
- bool,
- int,
- int,
- const std::string&,
- const std::string&,
- const std::vector<std::string>&,
- const std::vector<std::string>&,
- bool* outArg)
- {
- if (methodName ==
- RPC::PopupResponseServiceApi::getValidationMethodName()) {
- Assert(NULL != outArg);
- *outArg = m_daemonValidationResult;
- return;
- }
- }
-
- ~Client()
- {
- }
-
- static void setCheckAccessResult(int value)
- {
- m_checkAccessResult = value;
- }
-
- static void setDaemonValidationResult(bool value)
- {
- m_daemonValidationResult = value;
- }
-
- private:
- static int m_checkAccessResult;
- static bool m_daemonValidationResult;
-};
-
-} // namespace DBus
-}
-
-#endif // WRT_MOCKUPS_DBUS_CLIENT_MOCK_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 0.1
- * @brief Event support mockup.
- */
-/*
- * Creating this mockup is necessary, as, ie. AceThinClient is
- * using method invocation like this:
- *
- * m_popupClient->DPL::EventSupport<AcceptingCallsEvent>::AddListener
- *
- * Moreover, it must fire the delegate just after creation,
- * preferably in the same thread, to avoid race conditions
- * with callbacks that change (initialize) state of the callee,
- * ie. AceThinClient.
- *
- * */
-#include <dpl/fast_delegate.h>
-
-namespace DPL {
-namespace Event {
-template<typename T>
-class EventSupport {
- public:
- typedef FastDelegate1<const T &> DelegateType;
-
- void AddListener(DelegateType delegate)
- {
- T event;
- delegate(event);
- }
-};
-}
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief RPC client mockup class.
- */
-#include "rpc_client_mock.h"
-
-namespace UIProcess {
-PopupResponse RpcClient::m_popupReponse = PopupResponse(false);
-};
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 0.1
- * @brief RpcClient mockup class
- */
-#ifndef WRT_MOCKUPS_RPC_CLIENT_H_
-#define WRT_MOCKUPS_RPC_CLIENT_H_
-
-#include <memory>
-
-#include <dpl/exception.h>
-#include <dpl/fast_delegate.h>
-#include <dpl/generic_event.h>
-#include <dpl/foreach.h>
-#include <dpl/scoped_ptr.h>
-
-#include <popup_ace_data_types.h>
-#include "PolicyEffect.h"
-#include "event_support_mock.h"
-
-namespace UIProcess {
-
-DECLARE_GENERIC_EVENT_0(AcceptingCallsEvent)
-
-struct PopupResponse
-{
- PopupResponse(bool pIsAccessAllowed) :
- isAccessAllowed(pIsAccessAllowed)
- {
- }
- PopupResponse(const PopupResponse& aResponse) :
- isAccessAllowed(aResponse.isAccessAllowed)
- {
- }
- bool isAccessAllowed;
-};
-
-typedef std::unique_ptr<PopupResponse> UniquePopupResponsePtr;
-
-class RpcClient : public DPL::Event::EventSupport<AcceptingCallsEvent> {
- public:
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, NotConnected)
- };
-
- UniquePopupResponsePtr showSyncPopup(PolicyEffect&,
- AceUserdata&)
- {
- PopupResponse* newPopupReponse = new PopupResponse(m_popupReponse);
- return UniquePopupResponsePtr(newPopupReponse);
- }
-
- static void setPopupResponse(PopupResponse value)
- {
- m_popupReponse = value;
- }
-
- private:
- static PopupResponse m_popupReponse;
-};
-
-
-}; // namespace UIProcess
-
-#endif // WRT_MOCKUPS_RPC_CLIENT_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief Widget dao mockup class
- */
-#include "widget_dao_read_only_mock.h"
-
-namespace WrtDB {
-WidgetGUID WidgetDAOReadOnly::m_guid = WidgetGUID();
-} // namespace WrtDB
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief Widget dao mockup class
- */
-
-#ifndef _WRT_MOCKUPS_WIDGET_DAO_READ_ONLY_H_
-#define _WRT_MOCKUPS_WIDGET_DAO_READ_ONLY_H_
-
-#include <dpl/optional_typedefs.h>
-
-namespace WrtDB {
-
-typedef int DbWidgetHandle;
-typedef DPL::OptionalString WidgetGUID;
-
-class WidgetDAOReadOnly
-{
- public:
- /**
- * WidgetDAO Exception classes
- */
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, DatabaseError)
- DECLARE_EXCEPTION_TYPE(Base, ReadOnlyProperty)
- DECLARE_EXCEPTION_TYPE(Base, GUIDisNull)
- DECLARE_EXCEPTION_TYPE(Base, UnexpectedEmptyResult)
- DECLARE_EXCEPTION_TYPE(Base, WidgetNotExist)
- DECLARE_EXCEPTION_TYPE(Base, AlreadyRegistered)
- };
- WidgetDAOReadOnly(DbWidgetHandle /*widgetHandle*/){};
- WidgetGUID getGUID() const
- {
- return m_guid;
- }
-
- static void setGUID(WidgetGUID value)
- {
- m_guid = value;
- }
-
- private:
- static WidgetGUID m_guid;
-};
-
-} // namespace WrtDB
-
-#endif // _WRT_MOCKUPS_WIDGET_DAO_READ_ONLY_H_
-
+++ /dev/null
-Name: wrt-engine
-Summary: Web Runtime Engine
-Version: 0.5.7
-Release: 1
-Group: System/Libraries
-License: SAMSUNG
-Source0: %{name}-%{version}.tar.gz
-
-Requires(post): /usr/bin/sqlite3
-
-BuildRequires: pkgconfig(glib-2.0)
-BuildRequires: pkgconfig(sqlite3)
-BuildRequires: pkgconfig(ewebkit)
-BuildRequires: pkgconfig(elm-webview)
-BuildRequires: pkgconfig(libxml-2.0)
-BuildRequires: pkgconfig(dbus-1)
-BuildRequires: pkgconfig(efreet)
-BuildRequires: pkgconfig(appcore-efl)
-BuildRequires: pkgconfig(openssl)
-BuildRequires: pkgconfig(cert-svc)
-BuildRequires: pkgconfig(dpl-efl)
-BuildRequires: pkgconfig(libpcre)
-BuildRequires: pkgconfig(elementary)
-BuildRequires: pkgconfig(ecore)
-BuildRequires: pkgconfig(eina)
-BuildRequires: pkgconfig(ui-gadget)
-BuildRequires: pkgconfig(utilX)
-BuildRequires: pkgconfig(security-server)
-BuildRequires: pkgconfig(pkgmgr-installer)
-BuildRequires: pkgconfig(xmlsec1)
-BuildRequires: pkgconfig(libidn)
-BuildRequires: pkgconfig(dnet)
-BuildRequires: pkgconfig(pkgmgr-types)
-BuildRequires: pkgconfig(libsoup-2.4)
-BuildRequires: cmake
-BuildRequires: gettext
-BuildRequires: edje-tools
-
-%description
-online widget(W3C, BONDI, JIL, MSC) platform
-
-%package devel
-Summary: Web Runtime Engine Development
-Group: Development/Libraries
-Requires: %{name} = %{version}-%{release}
-
-%description devel
-online widget(W3C, BONDI, JIL, MSC) platform - dev
-
-%package test
-Summary: Web Runtime Engine Test
-Group: Development/Libraries
-Requires: %{name} = %{version}-%{release}
-
-%description test
-online widget(W3C, BONDI, JIL, MSC) platform - test program
-
-%prep
-%setup -q
-
-%build
-cmake . -DBUILD_TYPE="X1" -DCMAKE_INSTALL_PREFIX="/usr" -DCMAKE_BUILD_TYPE=$BUILD_TYPE
-make %{?jobs:-j%jobs}
-
-%install
-%make_install
-
-%post
-# Update database
-WRT_DB_VERSION=`sqlite3 /opt/dbspace/.wrt.db ".schema" | grep "CREATE TABLE WRT_VERSION_" | sed -e s/"CREATE TABLE "// -e s/"(version INT);"//`
-
-
-chmod +x /usr/bin/wrt_reset_db.sh
-
-if [ ${WRT_DB_VERSION} ]
-then
- if [ ${WRT_DB_VERSION} = "WRT_VERSION_28" ]
- then
- echo "Valid database detected so db installation ignored"
- else
- echo "Calling /usr/bin/wrt_reset_db.sh"
- /usr/bin/wrt_reset_db.sh
- fi
-else
- echo "Calling /usr/bin/wrt_reset_db.sh"
- /usr/bin/wrt_reset_db.sh
-fi
-
-mkdir -p /opt/apps/widget/system
-mkdir -p /opt/apps/widget/user
-mkdir -p /opt/apps/widget/exec
-mkdir -p /opt/apps/widget/data/Public
-mkdir -p /usr/lib/wrt-plugins
-mkdir -p /usr/etc/ace
-mkdir -p /usr/apps/org.tizen.policy
-
-if [ ${USER} == "root" ]
-then
- #change file owner
- chmod +s /usr/bin/wrt-client
-
- # 3. configurations
- chown root:root /usr/etc/ace/config.xml
- chown root:root /opt/dbspace/.wrt.db
- chown root:root /opt/dbspace/.wrt.db-journal
-fi
-
-#change file permissions
-# 3. configurations
-chmod 660 /opt/dbspace/.wrt.db
-chmod 660 /opt/dbspace/.wrt.db-journal
-#chmod 600 /usr/etc/ace/config.xml
-
-#symlink for package manager
-ln -sf /usr/bin/pkgmgr_backend_wgt /usr/etc/package-manager/backend/wgt
-
-#vconf --- register WRT
-/usr/bin/vconftool set -t string db/webruntime/vendor "Samsung" -f
-/usr/bin/vconftool set -t string db/webruntime/name "WebRuntime" -f
-/usr/bin/vconftool set -t string db/webruntime/version "1.0.0.0" -f
-/usr/bin/vconftool set -t string db/webruntime/api "W3C WAC1.0 WAC2.0" -f
-
-#################################################################
-# Set executin script
-#################################################################
-mkdir -p /opt/share/cert-svc/certs/code-signing/wac/
-echo "[WRT] install WAC ROOT CA preproduction certificate"
-cd /usr/share/wrt-engine
-cp wac.root.preproduction.pem /opt/share/cert-svc/certs/code-signing/wac/
-echo "[WRT] install WAC ROOT CA production certificate"
-cp wac.root.production.pem /opt/share/cert-svc/certs/code-signing/wac/
-echo "[WRT] install WAC publisherId preproduction certificate"
-cp wac.publisherid.pem /opt/share/cert-svc/certs/code-signing/wac/
-echo "[WRT] install Samsung developer mode certificate"
-cp samsung.devmode.root.cert.pem /opt/share/cert-svc/certs/code-signing/wac/
-
-echo "[WRT] wrt postinst done ..."
-
-%post test
-sqlite3 /opt/dbspace/.wrt.db "delete from featureslist where FeatureUUID=666;"
-sqlite3 /opt/dbspace/.wrt.db "delete from pluginproperties where PluginPropertiesId=666;"
-sqlite3 /opt/dbspace/.wrt.db "insert into featureslist(FeatureUUID, FeatureName, PluginPropertiesId) VALUES(666, 'feature:a9bb79c1', 666);"
-sqlite3 /opt/dbspace/.wrt.db "insert into pluginproperties(PluginPropertiesId, PluginLibraryName) VALUES(666, 'plugin:forfeaturea9bb79c1')"
-
-sqlite3 /opt/dbspace/.wrt.db "delete from featureslist where FeatureUUID=777;"
-sqlite3 /opt/dbspace/.wrt.db "delete from pluginproperties where PluginPropertiesId=777;"
-sqlite3 /opt/dbspace/.wrt.db "insert into pluginproperties(PluginPropertiesId, PluginLibraryName) VALUES(777, 'plugin:forfeaturexbugusfeature')"
-sqlite3 /opt/dbspace/.wrt.db "insert into featureslist(FeatureUUID, FeatureName, PluginPropertiesId) VALUES(777, 'feature:x-bugus-feature', 777);"
-
-echo "Copying ROOT CA certificate for W3C DIGITAL SIGNATURE test-suite."
-cp /opt/apps/widget/tests/w3c_certificates/root.cert.pem /opt/share/cert-svc/certs/code-signing/wac/
-echo "Copying ROOT CA certificate for wrt-engine-tests test-suite."
-cp /opt/apps/widget/tests/vcore_keys/root_cacert.pem /opt/share/cert-svc/certs/code-signing/wac/
-echo "Copying ROOT CA certificate for developer mode tests."
-cp /opt/apps/widget/tests/vcore_keys/operator.root.cert.pem /opt/share/cert-svc/certs/code-signing/wac/
-echo "Copying ROOT CA certificate for wac tests."
-cp /opt/apps/widget/user/wactests/demoCA/cacert.pem /opt/share/cert-svc/certs/code-signing/wac/test.root.cacert.pem
-
-%files
-/usr/bin/wrt-client
-/usr/bin/wrt_policy_setter.sh
-/usr/bin/wrt_reset_db.sh
-/usr/bin/pkgmgr_backend_wgt
-/usr/lib/libwrt-popup-lib.so*
-/opt/ug/lib/*
-/usr/share/edje/ace/*
-/usr/share/locale/*
-/usr/share/wrt-engine/*
-/usr/share/edje/wrt/Daemon.edj
-/usr/etc/ace/config.xml
-/usr/etc/ace/config.dtd
-/usr/etc/ace/bondixml.xsd
-/usr/etc/ace/demo.xml
-/usr/etc/ace/WACPolicy.xml
-/usr/etc/ace/UnrestrictedPolicy.xml
-/usr/etc/wrt/*
-
-%files devel
-/usr/include/*
-/usr/lib/pkgconfig/*
-
-%files test
-/usr/bin/wrt-tests-*
-/usr/bin/intercept-test.sh
-/usr/bin/wrt_client_tests
-/usr/bin/wrt-popup-test
-/usr/bin/wrt-miniapp
-/usr/bin/wrt_dao_tests_prepare_db.sh
-#/usr/apps/org.tizen.policy/bin/*
-#/usr/apps/org.tizen.policy/bin/unittests
-#/usr/apps/org.tizen.policy/bin/policyut
-#/usr/apps/org.tizen.policy/bin/signer
-#/usr/apps/org.tizen.policy/signer/*
-/usr/etc/ace/at*
-/usr/etc/ace/p*
-/usr/etc/ace/g*
-/usr/etc/ace/u*
-/usr/etc/ace/i*
-/usr/etc/ace/j*
-/usr/etc/ace/w*
-/usr/etc/ace/CMTest/*
-#/usr/etc/ace/SignerTests/*
-#/usr/etc/ace/PolicyUpdateTests/*
-/opt/apps/widget/tests/w3c_widgets/*
-/opt/apps/widget/tests/w3c_certificates/*
-/opt/apps/widget/tests/vcore*
-/opt/apps/widget/user/acetests/*
-/opt/apps/widget/user/tests/*
-/usr/lib/libwrt-engine-tests-lib.so*
-/opt/apps/widget/user/wactests/*
-/bin/unittests
-/usr/bin/wrt-scoped-gpointer-tests
+++ /dev/null
-prefix=/usr
-exec_prefix=${prefix}
-libdir=${prefix}/lib
-includedir=${prefix}/include
-
-Name: ace-client
-Description: ACE thin client library
-Version: @VERSION@
-Requires:
-Libs: -lwrt-ace-client -L${libdir}
-Cflags: -I${includedir}/wrt-engine/ace-client
+++ /dev/null
-prefix=/usr
-exec_prefix=${prefix}
-libdir=${prefix}/lib
-includedir=${prefix}/include
-
-Name: wrt-engine
-Description: wrt-engine
-Version: @VERSION@
-Requires: glib-2.0 sqlite3 ewebkit libxml-2.0 dbus-1 efreet cert-svc appcore-efl
-Libs: -L${libdir}
-Cflags: -I${includedir}/wrt-engine
+++ /dev/null
-prefix=/usr
-exec_prefix=${prefix}
-libdir=${prefix}/lib
-includedir=${prefix}/include
-
-Name: wrt-plugin-api
-Description: wrt-plugin-api
-Version: @VERSION@
-Requires:
-Libs:
-Cflags: -I${includedir}/wrt-engine
+++ /dev/null
-prefix=/usr
-exec_prefix=${prefix}
-libdir=${prefix}/lib
-includedir=${prefix}/include
-
-Name: wrt-plugin-loading
-Description: wrt-plugin-loading
-Version: @VERSION@
-Requires: dpl-efl dpl-wrt-dao-ro wrt-plugin-api ewebkit
-Libs: -lwrt-plugin-loading -L${libdir}
-Cflags: -I${includedir}/wrt-engine/plugin-service
+++ /dev/null
-This request was blocked because this site is not allowed to run in roaming mode.
+++ /dev/null
-!!!options!!! stop
-Various scripts for test/development usage
+++ /dev/null
-#!/usr/bin/expect -f
-#
-# Automated WRT packages installation script
-#
-# Usage:
-# expect wrt_install.expect WRT_version
-#
-#read arguments
-set arg1 [lrange $argv 0 0]
-set arg2 [lrange $argv 1 1]
-#run the telnet command to target
-spawn telnet target
-#wait for login prompt
-expect -re "login:"
-#send login
-send "root\n"
-#wait for shell prompt
-expect -re "#"
-#install engine package
-send "dpkg -i /mnt/nfs/wrt-engine_${arg1}_armel.deb\r"
-#wait for result
-expect -re "#"
-#install test package
-send "dpkg -i /mnt/nfs/wrt-engine-test_${arg1}_armel.deb\r"
-#wait for result
-expect -re "#"
-#install debug package
-send "dpkg -i /mnt/nfs/wrt-engine-dbg_${arg1}_armel.deb\r"
-#wait for result
-expect -re "#"
-#bye
-exit 0
+++ /dev/null
-#!/bin/bash
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Bash script for automated WRT test results processing
-# Author: Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
-
-SOURCE_DIR=$1
-WRT_VERSION=$2
-
-WRT_ENGINE=wrt-engine
-
-EXPECT_SCRIPT_DIR=$SOURCE_DIR/$WRT_ENGINE/scripts
-
-expect $EXPECT_SCRIPT_DIR/wrt_mount_nfs.expect $SOURCE_DIR
-
-if [ $? -ne 0 ]
-then
- echo Mount failed
- exit -1
-fi
-
-expect $EXPECT_SCRIPT_DIR/wrt_kill.expect
-
-if [ $? -ne 0 ]
-then
- echo Kill failed
- exit -1
-fi
-
-expect $EXPECT_SCRIPT_DIR/wrt_install.expect $WRT_VERSION
-
-if [ $? -ne 0 ]
-then
- echo Install failed
- exit -1
-fi
-
-
+++ /dev/null
-#!/usr/bin/expect -f
-#read arguments
-set arg1 [lrange $argv 0 0]
-set arg2 [lrange $argv 1 1]
-#run the telnet command to target
-spawn telnet target
-#wait for login prompt
-expect -re "login:"
-#send login
-send "root\n"
-#wait for shell prompt
-expect -re "#"
-
-#kill wrt clients
-send "killall -9 30100 30101 30102 30103 30104 30105 30106 30107 30108 30109 30110 wrt-client wrt-test-ui\r"
-#wait for result
-expect -re "#"
-#kill wrt engines
-send "killall -9 wrt_engine_daemon\r"
-#wait for result
-expect -re "#"
-
-#kill bluescreens
-send "killall -9 blue-screen\r"
-#wait for result
-expect -re "#"
-
-
-#bye
-exit 0
+++ /dev/null
-#!/usr/bin/expect -f
-#
-# Expect script for automated NFS resource mount
-#
-# Usage:
-#
-# wrt_mount_nfs.expect local_nfs_drive
-#
-#
-# read arguments
-set arg1 [lrange $argv 0 0]
-set arg2 [lrange $argv 1 1]
-# run the telnet command to target
-spawn telnet target
-# wait for login prompt
-expect -re "login:"
-# send login
-send "root\n"
-# wait for shell prompt
-expect -re "#"
-# mount network drive
-send "mount -o nolock,tcp -t nfs 192.168.129.1:$arg1 /mnt/nfs\r"
-# wait for result
-expect -re "#"
-# turn off power manager
-send "pmctrl stop\r"
-# wait for result
-expect -re "#"
-# bye
-exit 0
+++ /dev/null
-#!/usr/bin/expect -f
-#read arguments
-set arg1 [lrange $argv 0 0]
-set arg2 [lrange $argv 1 1]
-#Set long timeout for tests
-set timeout 600
-#run the telnet command to target
-spawn telnet target
-#wait for login prompt
-expect -re "login:"
-#send login
-send "root\n"
-#wait for shell prompt
-expect -re "#"
-
-send "( $arg1 --output=html --verbosity=yes --filename=/opt/home/root/result.html && echo \"WRT_TEST_CORRECT\"_\"RETURN\" ) || echo \"WRT_TEST_INVALID\"_\"RETURN\" \r"
-
-expect -re "WRT_TEST_INVALID_RETURN" {exit -1} \
- "WRT_TEST_CORRECT_RETURN" {expect -re "#"}
-
-send "( cat /opt/home/root/result.html && echo \"WRT_TEST_CORRECT\"_\"RETURN\" ) || echo \"WRT_TEST_INVALID\"_\"RETURN\"\r"
-
-#wait for result
-expect -re "WRT_TEST_INVALID_RETURN" {exit -1} \
- "WRT_TEST_CORRECT_RETURN" {expect -re "#"}
-
-exit 0
-#}
-
+++ /dev/null
-#!/bin/bash
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-# Bash script for automated WRT test results processing
-# Author: Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
-
-TODO=0
-SUCCED=0
-IGNORED=0
-FAILED=0
-
-EXPECT_SCRIPT_DIR=$1
-
-
-TESTS="/usr/bin/wrt-tests-orm
-/usr/bin/wrt-tests-w3c
-/usr/bin/wrt-tests-permission-check
-/usr/bin/wrt-tests-warp"
-
-
-for TEST in $TESTS
-do
- echo $TEST
- SIGHTML=`expect $EXPECT_SCRIPT_DIR/wrt_test.expect $TEST`
-
- if [ $? -ne 0 ]
- then
- echo Expect test script failed for: $EXPECT_SCRIPT_DIR/wrt_test.expect $TEST
- echo Expect result:
- echo $SIGHTML
- exit -1
- fi
-
- SUMMARY=`echo "$SIGHTML" | grep "<font color=\"cyan\">"`
-
- TODONEW=`echo "$SUMMARY" | grep Todo: | sed -e s/"<"/" "/g | awk '{print $3}' | tail -n 1`
- SUCCEDNEW=`echo "$SUMMARY" | grep Succeeded: | sed -e s/"<"/" "/g | awk '{print $3}' | tail -n 1 `
- IGNOREDNEW=`echo "$SUMMARY" | grep Ignored: | sed -e s/"<"/" "/g | awk '{print $3}' | tail -n 1`
- FAILEDNEW=`echo "$SUMMARY" | grep Failed: | sed -e s/"<"/" "/g | awk '{print $3}' | tail -n 1`
-
- let TODO=TODO+TODONEW
- let SUCCED=SUCCED+SUCCEDNEW
- let IGNORED=IGNORED+IGNOREDNEW
- let FAILED=FAILED+FAILEDNEW
-done
-
-
-
-
-echo Todo: $TODO
-echo Succed: $SUCCED
-echo Ignored: $IGNORED
-echo Failed: $FAILED
-
+++ /dev/null
-!!!options!!! stop
-WRT external API
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file api_callbacks_translate.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief Source file for api callbacks translate functions
- */
-
-#include <api_callbacks_translate.h>
-
-using namespace WrtDB;
-
-namespace ApiCallbacksTranslate {
-WrtErrStatus TranslateError(CommonError::Type status)
-{
- switch (status) {
- case CommonError::WrtSuccess:
- return WRT_SUCCESS;
-
- case CommonError::HandleNotFound:
- return WRT_ERROR_HANDLE_NOT_FOUND;
-
- case CommonError::AlreadyRunning:
- return WRT_ERROR_ALREADY_RUNNING;
-
- case CommonError::InvalidLanguage:
- return WRT_ERROR_INVALID_LANGUAGE;
-
- case CommonError::AlreadyStopped:
- return WRT_ERROR_ALREADY_STOPPED;
-
- case CommonError::StillAuthorizing:
- return WRT_ERROR_STILL_AUTHORIZING;
-
- case CommonError::EarlyKilled:
- return WRT_ERROR_EARLY_KILLED;
-
- case CommonError::AccessDenied:
- return WRT_ERROR_ACCESS_DENIED;
-
- case CommonError::DatabaseFailure:
- return WRT_INSTALLER_ERROR_DATABASE_FAILURE;
-
- case CommonError::NoPath:
- return WRT_ERROR_NO_PATH;
-
- default:
- LogError("Untranslatable error: " << status);
- return WRT_ERROR_INTERNAL;
- }
-}
-
-void LaunchWidgetCallback(ResultContext context,
- WidgetHandle widgetHandle,
- CommonError::Type result,
- const std::string& errorMsg,
- UserParam userParam)
-{
- ADD_PROFILING_POINT("wrt_launch", "stop", "stopped Widget Launching");
- Assert(userParam != NULL);
-
- WrtErrStatus error = TranslateError(result);
- APIWidgetLaunchStruct* launch =
- static_cast<APIWidgetLaunchStruct *>(userParam);
-
- if (launch->callback) {
- LogDebug("Calling launch widget callback (" << context << ", " <<
- widgetHandle << ", " << error << ", " << errorMsg << ").");
- launch->callback(context,
- widgetHandle,
- error,
- errorMsg.c_str(),
- launch->userdata);
- } else {
- LogWarning("LaunchWidgetCallback: ignoring NULL callback pointer");
- }
-
- delete launch;
-}
-
-void StatusCallback(int widget_handle,
- CommonError::Type result,
- void *data)
-{
- LogDebug("StatusCallback called " << widget_handle << " | " << result);
- Assert(NULL != data);
-
- WrtErrStatus error = TranslateError(result);
- StatusCallbackStruct* statusCallbackStruct =
- static_cast<StatusCallbackStruct*>(data);
-
- if (statusCallbackStruct->status_callback) {
- statusCallbackStruct->status_callback(widget_handle,
- error,
- statusCallbackStruct->userdata);
- } else {
- LogInfo("StatusCallback: ignoring NULL callback pointer");
- }
-
- delete statusCallbackStruct;
-}
-
-void InitCallback(CommonError::Type result, void *data)
-{
- LogDebug("InitCallback called " << result);
- Assert(data != NULL);
-
- WrtErrStatus error = TranslateError(result);
- InitCallbackStruct* initCallbackStruct =
- static_cast<InitCallbackStruct*>(data);
-
- if (initCallbackStruct->callback) {
- initCallbackStruct->callback(error, initCallbackStruct->userdata);
- } else {
- LogInfo("InitCallback: ignoring NULL callback pointer");
- }
-
- delete initCallbackStruct;
-}
-
-OperationStatusStruct CreateOperationStatusStruct(void* userdata,
- WrtStatusCallback cb)
-{
- LogDebug("Creating OperationStatusStruct with " << userdata << " " << cb);
- OperationStatusStruct ret;
- ret.operationStatusCallback = &StatusCallback;
-
- StatusCallbackStruct* statusCallbackStruct =
- new StatusCallbackStruct(userdata, cb);
-
- ret.userParam = statusCallbackStruct;
- return ret;
-}
-
-InitStatusStruct CreateInitStatusStruct(void* userdata, WrtInitCallback cb)
-{
- LogDebug("Creating InitStatusStruct with " << userdata << " " << cb);
- InitStatusStruct ret;
- ret.initStatusCallback = &InitCallback;
-
- InitCallbackStruct* initCallbackStruct =
- new InitCallbackStruct(userdata, cb);
-
- ret.userParam = initCallbackStruct;
- return ret;
-}
-
-} //namespace
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file api_callbacks_translate.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief Header file for api callbacks translate functions
- */
-#ifndef WRT_SRC_API_API_CALLBACKS_TRANSLATE_H_
-#define WRT_SRC_API_API_CALLBACKS_TRANSLATE_H_
-
-#include <wrt_api.h>
-#include <widget_launch_struct.h>
-#include <wrt_db_types.h>
-
-namespace ApiCallbacksTranslate {
-struct StatusCallbackStruct
-{
- void* userdata;
- WrtStatusCallback status_callback;
-
- StatusCallbackStruct(void* u,
- WrtStatusCallback s) :
- userdata(u),
- status_callback(s)
- {
- }
-};
-struct APIWidgetLaunchStruct
-{
- void* userdata;
- WrtLaunchWidgetCallback callback;
-};
-
-struct InitCallbackStruct
-{
- void* userdata;
- WrtInitCallback callback;
-
- InitCallbackStruct(void* u,
- WrtInitCallback s) :
- userdata(u),
- callback(s)
- {
- }
-};
-
-void LaunchWidgetCallback(ResultContext context,
- WidgetHandle widgetHandle,
- CommonError::Type result,
- const std::string& errorMsg,
- UserParam userParam);
-
-void StatusCallback(int widget_handle,
- CommonError::Type result,
- void *data);
-
-void InitCallback(CommonError::Type result, void *data);
-
-OperationStatusStruct CreateOperationStatusStruct(void* userdata,
- WrtStatusCallback cb);
-
-InitStatusStruct CreateInitStatusStruct(void* userdata, WrtInitCallback cb);
-} //namespace
-
-#endif /* WRT_SRC_API_API_CALLBACKS_TRANSLATE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef EXPORT_H_
-#define EXPORT_H_
-
-#define EXPORT_API __attribute__((visibility("default")))
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_api.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file contains definitions of wrt api
- */
-#include <stdlib.h>
-#include <string>
-#include <list>
-#include <memory>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <unistd.h>
-#include <dpl/exception.h>
-#include <dpl/log/log.h>
-#include <dpl/assert.h>
-
-#include <wrt_api.h>
-#include <api_callbacks_translate.h>
-#include <export.h>
-#include <widget_controller.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <global_context.h>
-#include <dpl/utils/widget_version.h>
-#include <new_strdup.h>
-#include "dnet.h"
-#include <dpl/popup/popup_controller.h>
-#include <attribute_facade.h>
-#include <dpl/wrt-dao-ro/WrtDatabase.h>
-#include <global_logic.h>
-#include <libxml/parser.h>
-#include <ace_client.h>
-#include <force_stop.h>
-#include <widget_localize_model.h>
-#include <widget_deserialize_model.h>
-
-using namespace WrtDB;
-
-#ifdef __cplusplus
-extern "C"
-{
-#endif
- /**
- * Wrt spank support
- */
- static int wrt_pedantic_count_init_shutdown;
- static int wrt_pedantic_count_widget_list;
- static int wrt_pedantic_count_widget_name;
- static int wrt_pedantic_count_widget_icon;
- static int wrt_pedantic_count_widget_info;
-
- /*
- * For Install plugin
- */
- static void wrtPedanticCheck()
- {
- if (wrt_pedantic_count_init_shutdown != 0 ||
- wrt_pedantic_count_widget_list != 0 ||
- wrt_pedantic_count_widget_name != 0 ||
- wrt_pedantic_count_widget_icon != 0 ||
- wrt_pedantic_count_widget_info != 0)
- {
- printf(
- "\033[1;31m===================================================="
- "============================\033[m\n");
- printf("\033[1;31m= WRT: SPANK SPANK SPANK !!! \033[m\n");
- printf(
- "\033[1;31m===================================================="
- "============================\033[m\n");
- printf("\033[1;31mReasons of spank: \033[m\n");
-
- if (wrt_pedantic_count_init_shutdown != 0) {
- printf(
- "\033[1;31m * COUNT(wrt_init) != COUNT(wrt_shutdown) [ %d ]"
- "\033[m\n",
- wrt_pedantic_count_init_shutdown);
- }
-
- if (wrt_pedantic_count_widget_list != 0) {
- printf(
- "\033[1;31m * COUNT(wrt_get_widget_list) != COUNT(wrt_free_"
- "widget_list) [ %d ] \033[m\n",
- wrt_pedantic_count_widget_list);
- }
-
- if (wrt_pedantic_count_widget_name != 0) {
- printf(
- "\033[1;31m * COUNT(wrt_get_widget_name) != COUNT(wrt_free_"
- "widget_name) [ %d ]\033[m\n",
- wrt_pedantic_count_widget_name);
- }
-
- if (wrt_pedantic_count_widget_icon != 0) {
- printf(
- "\033[1;31m * COUNT(wrt_get_widget_icon) != COUNT(wrt_free_"
- "widget_icon) [ %d ]\033[m\n",
- wrt_pedantic_count_widget_icon);
- }
-
- if (wrt_pedantic_count_widget_info != 0) {
- printf(
- "\033[1;31m * COUNT(wrt_get_widget_info) != COUNT(wrt_free_"
- "widget_info) [ %d ]\033[m\n",
- wrt_pedantic_count_widget_info);
- }
- }
- }
-
- int wrtPedanticInit();
-
- static int wrt_pedantic_initializer = wrtPedanticInit();
-
- int wrtPedanticInit()
- {
- wrt_pedantic_count_init_shutdown = 0;
- wrt_pedantic_count_widget_list = 0;
- wrt_pedantic_count_widget_name = 0;
- wrt_pedantic_count_widget_icon = 0;
- wrt_pedantic_count_widget_info = 0;
-
- atexit(&wrtPedanticCheck);
-
- printf("\033[1;34mWRT spank support enabled.\033[m\n");
-
- return 0;
- }
-
- typedef std::shared_ptr<WidgetModel> WidgetModelPtr;
- static WidgetModelPtr createWidgetModel(WidgetHandle widgetHandle)
- {
- WidgetModelPtr model = Domain::deserializeWidgetModel(widgetHandle);
-
- // Set localized data
- if(model) Domain::localizeWidgetModel(model);
-
- return model;
- }
-
- EXPORT_API int wrt_init(void *userdata,
- WrtInitCallback callback)
- {
- ADD_PROFILING_POINT("wrt_init",
- "start",
- "starting WebRuntime Initialization");
-
- // Set DPL/LOG MID
- DPL::Log::LogSystemSingleton::Instance().SetTag("WRT");
-
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- try
- {
- LogInfo("[WRT-API] INITIALIZING WRT...");
- LogInfo("[WRT-API] BUILD: " << __TIMESTAMP__);
-
- LogInfo("Prepare libxml2 to work in multithreaded program.");
-
- // Pedantic init check
- if (wrt_pedantic_count_init_shutdown > 0) {
- return WRT_ALREADY_INIT;
- }
-
- // Must touch all singletons to inherit current context
- ADD_PROFILING_POINT("touch_architecture", "start");
- GlobalContext::TouchArchitecture();
- ADD_PROFILING_POINT("touch_architecture", "stop");
-
- // Initialize Widget Logic
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::InitializeEvent(
- ApiCallbacksTranslate::CreateInitStatusStruct(
- userdata,
- callback)));
-
- // user has to call shutdown if init fails during initialization
- ++wrt_pedantic_count_init_shutdown;
- }
- catch (const DPL::Exception& ex)
- {
- LogError("Internal Error during Init:");
- return WRT_ERROR_INTERNAL;
- }
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-
- // OK
- return WRT_SUCCESS;
- }
-
- EXPORT_API void wrt_shutdown()
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- try
- {
- LogInfo("[WRT-API] DEINITIALIZING WRT...");
-
- if (wrt_pedantic_count_init_shutdown < 1) {
- return;
- }
-
- // Deinitialize Widget Logic
- CONTROLLER_POST_SYNC_EVENT(
- WidgetController,
- WidgetControllerEvents::DeinitializeEvent());
-
- // Pedantic deinit check
- --wrt_pedantic_count_init_shutdown;
- }
- catch (const DPL::Exception& ex)
- {
- LogError("Internal Error during Shutdown:");
- DPL::Exception::DisplayKnownException(ex);
- }
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_launch_widget(int widget_handle,
- void *obj,
- const char *widget_arg,
- void *userdata,
- WrtLaunchWidgetCallback callback)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- ADD_PROFILING_POINT("wrt_launch",
- "start",
- "starting Widget Launching");
- LogInfo("[WRT-API] WIDGET LAUNCH: " << widget_handle);
- ApiCallbacksTranslate::APIWidgetLaunchStruct* s =
- new ApiCallbacksTranslate::APIWidgetLaunchStruct;
-
- s->callback = callback;
- s->userdata = userdata;
-
- if (widget_arg == NULL) {
- widget_arg = "";
- }
-
- // Post launch event to widget controller
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::LaunchWidgetIdEvent(
- widget_handle,
- WidgetLaunchStruct(
- obj,
- &ApiCallbacksTranslate::LaunchWidgetCallback,
- s,
- widget_arg)));
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_kill_widget(int widget_handle,
- void* userdata,
- WrtStatusCallback cb)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] WIDGET KILL: " << widget_handle);
-
- // Post kill event to widget controller
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::KillWidgetIdEvent(
- widget_handle,
- ApiCallbacksTranslate::CreateOperationStatusStruct(userdata,
- cb)));
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API WrtErrStatus wrt_get_widget_list(int *length,
- int** list)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] GETTING WIDGETS LIST");
- if (!length || !list) {
- return WRT_ERROR_INVALID_PARAMETER;
- }
-
- WidgetHandleList widgetList = WidgetDAO::getHandleList();
-
- int *ret = new int[widgetList.size()];
- int i = 0;
-
- FOREACH(iterator, widgetList)
- {
- ret[i++] = *iterator;
- }
-
- *list = ret;
- *length = widgetList.size();
-
- ++wrt_pedantic_count_widget_list;
- return WRT_SUCCESS;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_free_widget_list(int *list)
- {
- if (list) {
- delete[] list;
- --wrt_pedantic_count_widget_list;
- }
- }
-
- EXPORT_API WrtErrStatus wrt_get_widget_by_id(const char *widget_id,
- int *widget_handle)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] GETTING WIDGET HANDLE BY ID : " << widget_id);
- if (!widget_id) {
- return WRT_ERROR_INVALID_PARAMETER;
- }
-
- int len;
- bool found = false;
- int *list;
-
- wrt_get_widget_list(&len, &list);
-
- for (int i = 0; i < len; ++i) {
- wrt_widget_info *widget;
- WrtErrStatus status;
-
- status = wrt_get_widget_info(list[i], &widget);
- if (status == WRT_SUCCESS) {
- if (widget->id != NULL && !strcmp(widget->id, widget_id)) {
- *widget_handle = list[i];
- wrt_free_widget_info(widget);
- found = true;
- break;
- }
- wrt_free_widget_info(widget);
- }
- }
-
- wrt_free_widget_list(list);
-
- if (!found) {
- return WRT_ERROR_ID_NOT_FOUND;
- } else {
- return WRT_SUCCESS;
- }
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API WrtErrStatus wrt_get_widget_name(int widget_handle,
- char **name)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] GETTING WIDGET NAME: " << widget_handle);
- if (!name) {
- return WRT_ERROR_INVALID_PARAMETER;
- }
-
- WidgetModelPtr ret = createWidgetModel(widget_handle);
- if (!ret) {
- return WRT_ERROR_HANDLE_NOT_FOUND;
- }
-
- DPL::OptionalString n = ret->Name.Get();
- if (!n.IsNull()) {
- *name = new_strdup(DPL::ToUTF8String(*n).c_str());
- } else {
- *name = NULL;
- }
-
- ++wrt_pedantic_count_widget_name;
- return WRT_SUCCESS;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_free_widget_name(char *name)
- {
- if (name) {
- delete[] name;
- --wrt_pedantic_count_widget_name;
- }
- }
-
- EXPORT_API WrtErrStatus wrt_get_widget_icon(int widget_handle,
- wrt_widget_icon **widgetIcon)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] GETTING WIDGET ICON: " << widget_handle);
- if (!widgetIcon) {
- return WRT_ERROR_INVALID_PARAMETER;
- }
-
- WidgetModelPtr ret = createWidgetModel(widget_handle);
- if (!ret) {
- return WRT_ERROR_HANDLE_NOT_FOUND;
- }
-
- OptionalWidgetIcon tmpIcon = ret->Icon.Get();
- if (!tmpIcon.IsNull()) {
- std::ostringstream sourceFile;
- sourceFile << GlobalConfig::GetUserInstalledWidgetPath() << "/";
- sourceFile << ret->PkgName.Get() << "/" << tmpIcon->src;
-
- wrt_widget_icon* icon = new wrt_widget_icon;
-
- icon->src = new_strdup(sourceFile.str().c_str());
-
- icon->width = !tmpIcon->width ? -1 : *tmpIcon->width;
- icon->height = !tmpIcon->height ? -1 : *tmpIcon->height;
-
- *widgetIcon = icon;
- } else {
- *widgetIcon = NULL;
- }
-
- ++wrt_pedantic_count_widget_icon;
-
- return WRT_SUCCESS;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_free_widget_icon(wrt_widget_icon *widgetIcon)
- {
- if (widgetIcon) {
- delete[] widgetIcon->src;
- delete widgetIcon;
- --wrt_pedantic_count_widget_icon;
- }
- }
-
- EXPORT_API WrtErrStatus wrt_check_widget_version(int widget_handle,
- const char *widget_version)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] CHECKING WIDGET VERSION: " << widget_handle);
- if (!widget_version) {
- return WRT_ERROR_INVALID_PARAMETER;
- }
-
- WidgetModelPtr widgetModel = createWidgetModel(widget_handle);
- if (!widgetModel) {
- return WRT_ERROR_HANDLE_NOT_FOUND;
- }
-
- // Check if version string is available
- OptionalWidgetVersion optionalVersion = widgetModel->Version.Get();
-
- if (!optionalVersion) {
- // If no version string was provided, all versions are newer
- return WRT_VERSION_NEW;
- }
-
- WidgetVersion checkedWidgetVersion(
- DPL::FromASCIIString(widget_version));
- OptionalWidgetVersion version = widgetModel->Version.Get();
- WidgetVersion installedWidgetVersion =
- !!version ? *version : WidgetVersion();
-
- // Check if strings are comparable at at all
- if (!checkedWidgetVersion.IsWac() ||
- !installedWidgetVersion.IsWac())
- {
- // Cannot compare garbage strings
- return WRT_VERSION_NOT_COMPARABLE;
- }
-
- // Now, compare versions
- if (checkedWidgetVersion == installedWidgetVersion) {
- return WRT_VERSION_EXACT;
- } else if (checkedWidgetVersion > installedWidgetVersion) {
- return WRT_VERSION_NEW;
- } else {
- return WRT_VERSION_OLD;
- }
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API WrtErrStatus wrt_get_widget_info(int widget_handle,
- wrt_widget_info **widget_info)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] GETTING WIDGET INFO: " << widget_handle);
- if (!widget_info) {
- return WRT_ERROR_INVALID_PARAMETER;
- }
-
- WidgetModelPtr widgetModel = createWidgetModel(widget_handle);
- if (!widgetModel) {
- return WRT_ERROR_HANDLE_NOT_FOUND;
- }
-
- wrt_widget_info *info = new wrt_widget_info;
-
- memset(info, 0, sizeof (*info));
-
- OptionalWidgetIcon icon = widgetModel->Icon.Get();
- if (!icon.IsNull()) {
- info->icon_path = new_strdup(
- DPL::ToUTF8String(icon->src).c_str());
- }
- DPL::OptionalString n = widgetModel->Name.Get();
- if (!n.IsNull()) {
- info->name = new_strdup(DPL::ToUTF8String(*n).c_str());
- }
-
- DPL::OptionalString GUID = widgetModel->GUID.Get();
- if (!!GUID) {
- info->id = new_strdup(DPL::ToUTF8String(*GUID).c_str());
- }
-
- std::string installedWidgetVersionString;
-
- if (!widgetModel->Version.Get()) {
- installedWidgetVersionString = "";
- } else {
- installedWidgetVersionString = DPL::ToUTF8String(
- widgetModel->Version.Get()->Raw());
- }
-
- info->version = new_strdup(installedWidgetVersionString.c_str());
-
- info->pkg_name = new_strdup(
- DPL::ToUTF8String(widgetModel->PkgName.Get()).c_str());
-
- WidgetStorageSize widgetStorage =
- widgetModel->ApplicationStorage.Get();
- info->application_size = widgetStorage.applicationStorage;
- info->data_size = widgetStorage.dataStorage;
-
- *widget_info = info;
- ++wrt_pedantic_count_widget_info; // Increase usage count
-
- return WRT_SUCCESS;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_free_widget_info(wrt_widget_info* widget_info)
- {
- if (widget_info) {
- delete[] widget_info->icon_path;
- delete[] widget_info->id;
- delete[] widget_info->name;
- delete[] widget_info->version;
- delete[] widget_info->pkg_name;
- delete widget_info;
- --wrt_pedantic_count_widget_info;
- }
- }
-
- EXPORT_API void wrt_suspend_widget(int widget_handle,
- void* userdata,
- WrtStatusCallback cb)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] SUSPEND");
-
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::SuspendWidgetEvent(
- widget_handle,
- ApiCallbacksTranslate::CreateOperationStatusStruct(userdata,
- cb)));
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_resume_widget(int widget_handle,
- void* userdata,
- WrtStatusCallback cb)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] RESUME");
-
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::ResumeWidgetEvent(
- widget_handle,
- ApiCallbacksTranslate::CreateOperationStatusStruct(userdata,
- cb)));
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_reset_widget(int widget_handle,
- const char *bundleData)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] wrt_reset_widget");
-
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::ResetWidgetEvent(
- widget_handle,
- std::string(bundleData)));
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API int wrt_set_developer_mode(
- int mode,
- wrt_set_developer_mode_callback callback,
- void* userParam)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] SET DEVELOPER MODE: ");
-
- GlobalLogicSingleton::Instance().
- GetGlobalModel()->DeveloperMode.Set(mode);
-
- //response
- typedef GenericUserCallbackCall1<wrt_set_developer_mode_callback,
- void *> SetDeveloperModeCallback;
- POST_USER_CALLBACK(
- new SetDeveloperModeCallback(callback, userParam));
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API int wrt_set_compliance_mode(
- int mode,
- wrt_set_compliance_mode_callback callback,
- void* userParam)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] SET COMPLIANCE MODE: ");
-
- GlobalLogicSingleton::Instance().
- GetGlobalModel()->ComplianceMode.Set(mode);
-
- //response
- typedef GenericUserCallbackCall1<wrt_set_compliance_mode_callback,
- void *> SetComplianceModeCallback;
- POST_USER_CALLBACK(
- new SetComplianceModeCallback(callback, userParam));
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
-
- EXPORT_API int wrt_set_compliance_fake_imei(
- const char *imei,
- wrt_set_compliance_fake_imei_callback callback,
- void *userParam)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] SET COMPLIANCE IMEI: ");
-
- GlobalLogicSingleton::Instance().
- GetGlobalModel()->ComplianceFakeImei.Set(imei);
-
- //response
- typedef GenericUserCallbackCall1<
- wrt_set_compliance_fake_imei_callback,
- void *> SetComplianceFakeImeiCallback;
- POST_USER_CALLBACK(
- new SetComplianceFakeImeiCallback(callback, userParam));
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
-
- EXPORT_API int wrt_set_compliance_fake_meid(
- const char *meid,
- wrt_set_compliance_fake_meid_callback callback,
- void *userParam)
- {
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogInfo("[WRT-API] SET COMPLIANCE MEID: ");
-
- GlobalLogicSingleton::Instance().
- GetGlobalModel()->ComplianceFakeMeid.Set(meid);
-
- //response
- typedef GenericUserCallbackCall1<
- wrt_set_compliance_fake_meid_callback,
- void *> SetComplianceFakeMeidCallback;
- POST_USER_CALLBACK(
- new SetComplianceFakeMeidCallback(callback, userParam));
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
- }
-
- EXPORT_API void wrt_force_stop(int widget_handle)
- {
- Utils::killWidget(widget_handle);
- }
-
-#ifdef __cplusplus
-}
-#endif
+++ /dev/null
-/*
- * wrt-engine
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_api.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file contains declarations of wrt api
- */
-
-/*
- * @defgroup wrt_engine_group WebRunTime engine Library
- * @ingroup internet_FW
- * Functions to APIs to access wrt-engine
- */
-
-#ifndef WRT_API_H_
-#define WRT_API_H_
-
-#include <stdbool.h>
-#include <stddef.h>
-#include <wrt_type.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define WRT_DEPRECATED __attribute__((deprecated))
-
-/**
- * Callback function type invoked after async init function
- */
-typedef void (*WrtInitCallback)(WrtErrStatus status,
- void *data);
-
-/**
- * Callback function type invoked after launching widget
- */
-typedef void (*WrtLaunchWidgetCallback)(void *widget_canvas,
- int widget_handle,
- WrtErrStatus status,
- const char *errorMsg,
- void *data);
-
-/**
- * Callback function type invoked after async functions
- */
-typedef void (*WrtStatusCallback)(int widget_handle,
- WrtErrStatus status,
- void *data);
-
-/**
- * Callback function type invoked when widget needs to be resized
- */
-typedef void (*WrtWidgetResizeCallback)(int widget_handle, int width,
- int height, void *userdata);
-
-/**
- * Callback function type invoked when installed widgets list
- * has been changed
- */
-typedef void (*WrtUpdateNeededCallback)(void *userdata);
-
-/**
- * Callback function type invoked when wrt ask for dialog window
- * to be shown.
- */
-typedef void (*WrtQuestionShowCallback)(void *question_data, void *userdata);
-
-/**
- * Callback argument for response of combobox callback
- */
-typedef void (*WrtComboboxResponseCallback)(int selected_index, void* userdata);
-/**
- * Callback function type invoked when wrt asks for showing combobox
- * to be shown.
- */
-typedef void (*WrtComboboxCallback)(int length,
- char** combobox_options,
- void* resposne_data,
- WrtComboboxResponseCallback callback,
- void *userdata);
-/**
- * Callback function type invoked when wrt ask for widget close
- */
-typedef void (*WrtCloseWidgetCallback)(int widget_handle, void *userdata);
-
-/**
- * Callback function type invoked when developer mode is set
- */
-typedef void (*wrt_set_developer_mode_callback)(void *userParam);
-
-/**
- * Callback function type invoked when compliance mode is set
- */
-typedef void (*wrt_set_compliance_mode_callback)(void *userParam);
-
-/**
- * Callback function type invoked when compliance fake imei is set
- */
-typedef void (*wrt_set_compliance_fake_imei_callback)(void *userParam);
-
-/**
- * Callback function type invoked when compliance fake meid is set
- */
-typedef void (*wrt_set_compliance_fake_meid_callback)(void *userParam);
-
-/**
- * Callbacks used by wrt
- */
-typedef struct _WrtCallbacks
-{
- WrtWidgetResizeCallback resize_cb; /**< widget resize callback */
- WrtUpdateNeededCallback update_cb; /**< widget update callback */
- WrtComboboxCallback combobox_cb; /**< widget combobox callback */
- WrtCloseWidgetCallback close_cb; /**< close widget callback */
-} WrtCallbacks;
-
-static const WrtCallbacks WRT_CALLBACKS_INIT = {
- 0,
- 0,
- 0,
- 0
-};
-
-/**
- * @fn int wrt_init(void *userdata, WrtInitCallback callback)
- * @brief Initializes WRT
- *
- * This method is used to initialize wrt-engine.
- * It connects to database, initializes webkit, widget and plugin logic.
- *
- * @param [in] userdata - User parameters to be passed to the callback
- * @param [in] callback - The callback function that is launched, after wrt initialization.
- * The callback is called in the context of the application's
- * main loop.
- *
- * @return 0 on success, -1 on failure
- *
- * Sample code:
- * @code
- * int main (int argc, char *argv[])
- * {
- * init_loop(argc, argv);
- * printf("Initializing WRT");
- * wrt_init(NULL, &init_cb);
- *
- * wait_for_wrt_init();
- * printf("Starting tests");
- *
- * int status = DPL_TestRunnerSingleton_Instance().ExecTestRunner(argc, argv);
- *
- * wrt_shutdown();
- * quit_loop();
- * return status;
- * }
- * @endcode
- *
- * @see wrt_shutdown
- */
-int wrt_init(void *userdata,
- WrtInitCallback callback);
-
-/**
- * @fn void wrt_shutdown(void)
- * @brief Deinitializes WRT
- *
- * This method is used to deinitialize wrt-engine.
- * It deinitializes widget logic, plugin logic, shuts down connection to database,
- * switchs back to single thread and does deinit checks.
- *
- * @return nothing
- *
- * Sample code:
- * @code
- * int main (int argc, char *argv[])
- * {
- * init_loop(argc, argv);
- * printf("Initializing WRT");
- * wrt_init(NULL, &init_cb);
- *
- * wait_for_wrt_init();
- * printf("Starting tests");
- *
- * int status = DPL_TestRunnerSingleton_Instance().ExecTestRunner(argc, argv);
- *
- * wrt_shutdown();
- * quit_loop();
- * return status;
- * }
- * @endcode
- *
- * @see wrt_init
- */
-void wrt_shutdown(void);
-
-/**
- * @fn void wrt_launch_widget(int widget_handle, void *obj, void *userdata, const char *widget_arg,
- * WrtLaunchWidgetCallback callback)
- * @brief Launches widget application
- *
- * This method is used to launch a widget application.
- *
- * @param [in] widget_handle - widget id
- * @param [in] obj - widget container in which widget will be painted
- * @param [in] widget_arg - widget "input" argument
- * @param [in] userdata - user parameters to be passed to the callback
- * @param [in] callback - Callback function that is launched, after creating widget by wrt
- * The callback is called in the context of the application's
- *
- * @return nothing (status returned in callback)
- *
- * @see wrt_kill_widget
- */
-void wrt_launch_widget(int widget_handle,
- void *obj,
- const char *widget_arg,
- void *userdata,
- WrtLaunchWidgetCallback callback);
-
-/**
- * @fn void wrt_kill_widget(int widget_handle, void* userdata, WrtStatusCallback cb)
- * @brief Kills widget application
- *
- * This method is used to kill a widget application.
- *
- * @param [in] widget_handle - widget id
- * @param [in] userdata - user parameters to be passed to the callback
- * @param [in] cb - Call to this one will be done and the end of operation
- * The callback is called in the context of the application's
- *
- * @return nothing (status returned in callback)
- *
- * @see wrt_launch_widget
- */
-void wrt_kill_widget(int widget_handle,
- void* userdata,
- WrtStatusCallback cb);
-
-/**
- * @fn WrtErrStatus wrt_get_widget_list(int *length, int** list)
- * @brief Gets list of widgets
- *
- * This method is used to get list of installed widget.
- *
- * @param [out] length - length of list (should be allocated before calling function)
- * @param [out] list - list of widget's id (*list should be allocated before calling function)
- *
- * @return Error status
- * @retval WRT_SUCCESS - recieved list of widgets
- * @retval WRT_ERROR_INVALID_PARAMETER - at least one of the parameters is invalid
- * @retval WRT_ERROR_NOT_INITIALIZED - wrt engine is not initialized
- *
- * Sample code:
- * @code
- * void list_all_widgets() {
- *
- * int widgetCount;
- * int *widgetApIdList;
- * wrt_get_widget_list( &widgetCount, &widgetApIdList );
- * for (int i = 0; i < widgetCount; i++) {
- *
- * int appId = widgetApIdList[i];
- *
- * char *widgetName;
- * wrt_get_widget_name(appId, &widgetName);
- *
- * printf( "Widget appId: %d , name: %s",appId,widgetName );
- * wrt_free_widget_name(widgetName);
- * }
- * wrt_free_widget_list(widgetApIdList);
- * }
- * @endcode
- *
- * @see wrt_free_widget_list
- */
-WrtErrStatus wrt_get_widget_list(int *length,
- int** list);
-
-/**
- * @fn void wrt_free_widget_list(int *list)
- * @brief Frees widget list
- *
- * This method is used to free list got from wrt_get_widget_list
- *
- * @param [in] list - list of WidgetHandles to free
- *
- * @return nothing
- *
- * Sample code:
- * @code
- * void list_all_widgets() {
- *
- * int widgetCount;
- * int *widgetApIdList;
- * wrt_get_widget_list( &widgetCount, &widgetApIdList );
- * for (int i = 0; i < widgetCount; i++) {
- *
- * int appId = widgetApIdList[i];
- *
- * char *widgetName;
- * wrt_get_widget_name(appId, &widgetName);
- *
- * printf( "Widget appId: %d , name: %s",appId,widgetName );
- * wrt_free_widget_name(widgetName);
- * }
- * wrt_free_widget_list(widgetApIdList);
- * }
- * @endcode
- *
- * @see wrt_get_widget_list
- */
-void wrt_free_widget_list(int *list);
-
-/**
- * @fn WrtErrStatus wrt_get_widget_by_id(const char *widget_id, int *widget_handle)
- * @brief Gets widget handle by widget id in config.xml
- *
- * This method is used to get widget's handle by widget id.
- *
- * @param [in] widget_id - widget id
- * @param [out] widget_handle - widget handle of installed widget
- *
- * @return Error status
- * @retval WRT_SUCCESS - widget id is found
- * @retval WRT_ERROR_ID_NOT_FOUND - widget id is not found
- * @retval WRT_ERROR_INVALID_PARAMETER - name parameter is invalid
- * @retval WRT_ERROR_NOT_INITIALIZED - wrt engine is not initialized
- *
- * Sample code:
- * @code
- * void print_widget_handle(const char *id) {
- * // id should be URI format like 'http://www.wacapps.net/..'
- * WrtErrStatus status = wrt_get_widget_by_id(id, &handle);
- * if(status == WRT_SUCCESS)
- * {
- * LOG(LOG_WARN, LOG_NAME, "id : %s, handle : %d", id, handle);
- * }else{
- * LOG(LOG_WARN, LOG_NAME, "FAIL to get widget handle");
- * }
- * }
- * @endcode
- *
- */
-WrtErrStatus wrt_get_widget_by_id(const char *widget_id,
- int *widget_handle);
-
-/**
- * @fn WrtErrStatus wrt_get_widget_name(int widget_handle, char **name)
- * @brief Gets widget name
- *
- * This method is used to get widget's name.
- *
- * @param [in] widget_handle - widget id
- * @param [out] name - widget name (*name should be allocated before calling function)
- *
- * @return Error status
- * @retval WRT_SUCCESS - recieved widget's name
- * @retval WRT_ERROR_HANDLE_NOT_FOUND - widget handle was not found
- * @retval WRT_ERROR_INVALID_PARAMETER - name parameter is invalid
- * @retval WRT_ERROR_NOT_INITIALIZED - wrt engine is not initialized
- *
- * Sample code:
- * @code
- * void list_all_widgets() {
- *
- * int widgetCount;
- * int *widgetApIdList;
- * wrt_get_widget_list( &widgetCount, &widgetApIdList );
- * for (int i = 0; i < widgetCount; i++) {
- *
- * int appId = widgetApIdList[i];
- *
- * char *widgetName;
- * wrt_get_widget_name(appId, &widgetName);
- *
- * printf( "Widget appId: %d , name: %s",appId,widgetName );
- * wrt_free_widget_name(widgetName);
- * }
- * wrt_free_widget_list(widgetApIdList);
- * }
- * @endcode
- *
- * @see wrt_free_widget_name
- */
-WrtErrStatus wrt_get_widget_name(int widget_handle,
- char **name);
-
-/**
- * @fn void wrt_free_widget_name(char *name)
- * @brief Frees widget name resource
- *
- * This method is used to free widget name got from wrt_get_widget_name
- *
- * @param [in] name - widget name to free
- *
- * @return nothing
- *
- * Sample code:
- * @code
- * void list_all_widgets() {
- *
- * int widgetCount;
- * int *widgetApIdList;
- * wrt_get_widget_list( &widgetCount, &widgetApIdList );
- * for (int i = 0; i < widgetCount; i++) {
- *
- * int appId = widgetApIdList[i];
- *
- * char *widgetName;
- * wrt_get_widget_name(appId, &widgetName);
- *
- * printf( "Widget appId: %d , name: %s",appId,widgetName );
- * wrt_free_widget_name(widgetName);
- * }
- * wrt_free_widget_list(widgetApIdList);
- * }
- * @endcode
- *
- * @see wrt_get_widget_name
- */
-void wrt_free_widget_name(char *name);
-
-/**
- * @fn WrtErrStatus wrt_get_widget_icon(int widget_handle, wrt_widget_icon **icon)
- * @brief Gets widget icon data
- *
- * This method is used to get widget's icon data.
- * Structure wrt_widget_icon contains valid path to widget's icon and its width / height in pixels.
- *
- * @param [in] widget_handle - widget id
- * @param [out] icon - widget's icon data (*icon should be allocated
- * before calling function)
- *
- * @return Error status
- * @retval WRT_SUCCESS - success
- * @retval WRT_ERROR_HANDLE_NOT_FOUND - widget handle was not found
- * @retval WRT_ERROR_INVALID_PARAMETER - icon parameter is invalid
- * @retval WRT_ERROR_NOT_INITIALIZED - wrt engine is not initialized
- *
- * Sample code:
- * @code
- * void list_all_icons_paths() {
- * int length;
- * int *list;
- * wrt_get_widget_list(&length,&list);
- * for(int i=0;i<length;++i){
- * wrt_widget_info_data widget;
- * WrtErrStatus tmpstatus;
- *
- * tmpstatus=wrt_get_widget_icon(list[i],&(widget.widget_icon));
- * if(tmpstatus!=WRT_SUCCESS) break;
- *
- * printf( "i: %d , icon path: %s, width: %d, height: %d \n",
- * i,widget.widget_icon.src, widget.widget_icon.width, widget.widget_icon.height );
- *
- * wrt_free_widget_icon(widget.widget_icon);
- * }
- * wrt_free_widget_list(list);
- * }
- * @endcode
- *
- * @see wrt_free_widget_icon
- */
-WrtErrStatus wrt_get_widget_icon(int widget_handle,
- wrt_widget_icon **icon);
-
-/**
- * @fn void wrt_free_widget_icon(wrt_widget_icon *icon)
- * @brief Frees widget icon resource
- *
- * This method is used to free widget's icon data struct.
- *
- * @param [in] icon - Widget's icon data struct
- *
- * @return nothing
- *
- * Sample code:
- * @code
- * void list_all_icons_paths() {
- * int length;
- * int *list;
- * wrt_get_widget_list(&length,&list);
- * for(int i=0;i<length;++i){
- * wrt_widget_info_data widget;
- * WrtErrStatus tmpstatus;
- *
- * tmpstatus=wrt_get_widget_icon(list[i],&(widget.widget_icon));
- * if(tmpstatus!=WRT_SUCCESS) break;
- *
- * printf( "i: %d , icon path: %s, width: %d, height: %d \n",
- * i,widget.widget_icon.src, widget.widget_icon.width, widget.widget_icon.height );
- *
- * wrt_free_widget_icon(widget.widget_icon);
- * }
- * wrt_free_widget_list(list);
- * }
- * @endcode
- *
- * @see wrt_get_widget_icon
- */
-void wrt_free_widget_icon(wrt_widget_icon *icon);
-
-/**
- * @fn WrtErrStatus wrt_get_widget_info (int widget_handle, wrt_widget_info **widget_info)
- * @brief Gets some information about the widget
- *
- * This method receives some information about the widget that is read from its config.xml
- * during installation like its id, name, version and path to the widgets icon.
- * Then it passing all that data using wrt_widget_info structure.
- *
- * @param [in] widget_handle - specify widget_id of the Widget
- * @param [out] widget_info - pointer to pointer to wrt_widget_info structure
- * to store widget's information in
- *
- * @return Error status
- * @retval WRT_SUCCESS - success
- * @retval WRT_ERROR_HANDLE_NOT_FOUND - widget handle was not found
- * @retval WRT_ERROR_INVALID_PARAMETER - widget info is incorrect
- * @retval WRT_ERROR_NOT_INITIALIZED - wrt engine is not initialized
- *
- * Sample code:
- * @code
- * void list_widget_info() {
- * int length;
- * int *list;
- * wrt_get_widget_list(&length,&list);
- * for(int i=0;i<length;++i){
- * wrt_widget_info_data widget;
- * WrtErrStatus tmpstatus;
- *
- * tmpstatus=wrt_get_widget_info(list[i],&(widget.widget_info));
- * if(tmpstatus!=WRT_SUCCESS) break;
- *
- * printf( "Widget name: %s , version: %s, icon_path: %s \n",
- * widget.widget_info.name,widget.widget_info.name,widget.widget_info.icon_path );
- *
- * wrt_free_widget_info(widget.widget_info);
- * }
- * wrt_free_widget_list(list);
- * }
- * @endcode
- *
- * @see wrt_free_widget_info
- * @see wrt_get_widget_all_info
- * @see wrt_free_widget_all_info
- */
-WrtErrStatus wrt_get_widget_info (int widget_handle,
- wrt_widget_info **widget_info);
-
-/**
- * @fn void wrt_free_widget_info(wrt_widget_info* widget_info)
- * @brief Frees widget information structure
- *
- * This method is used to free wrt_widget_info structure holding information about the widget.
- *
- * @param [in] widget_info - pointer to wrt_widget_info structure to be freed
- * @return nothing
- *
- * Sample code:
- * @code
- * void list_widget_info() {
- * int length;
- * int *list;
- * wrt_get_widget_list(&length,&list);
- * for(int i=0;i<length;++i){
- * wrt_widget_info_data widget;
- * WrtErrStatus tmpstatus;
- *
- * tmpstatus=wrt_get_widget_info(list[i],&(widget.widget_info));
- * if(tmpstatus!=WRT_SUCCESS) break;
- *
- * printf( "Widget name: %s , version: %s, icon_path: %s \n",
- * widget.widget_info.name,widget.widget_info.name,widget.widget_info.icon_path );
- *
- * wrt_free_widget_info(widget.widget_info);
- * }
- * wrt_free_widget_list(list);
- * }
- * @endcode
- *
- * @see wrt_get_widget_info
- * @see wrt_get_widget_all_info
- * @see wrt_free_widget_all_info
- */
-void wrt_free_widget_info(wrt_widget_info* widget_info);
-
-/**
- * @fn WrtErrStatus wrt_check_widget_version (int widget_handle, const char *widget_version)
- * @brief Checks widget version
- *
- * This method is used to compare version of installed widget with specified version.
- *
- * @param [in] widget_handle handle of widget
- * @param [in] widget_version version to compare with
- *
- * @return Error status
- * @retval WRT_ERROR_INVALID_PARAMETER - invalid widget_version value given
- * @retval WRT_ERROR_HANDLE_NOT_FOUND - widget handle was not found
- * @retval WRT_VERSION_EXACT - widget's version the same as in argument
- * @retval WRT_VERSION_NEW - widget's version is latest
- * @retval WRT_VERSION_OLD - widget's version is older
- * @retval WRT_ERROR_INTERNAL - internal library error
- * @retval WRT_ERROR_NOT_INITIALIZED - wrt engine is not initialized
- *
- * Sample code:
- * @code
- * //TODO SAMPLE
- * @endcode
- */
-WrtErrStatus wrt_check_widget_version (int widget_handle,
- const char *widget_version);
-
-void wrt_suspend_widget(int widget_handle,
- void* userdata,
- WrtStatusCallback cb);
-
-void wrt_resume_widget(int widget_handle,
- void* userdata,
- WrtStatusCallback cb);
-
-/**
- * @brief To send bundle data to the running widget
- *
- * This method send bundle data string to view logic
- *
- * @param [in] bundleString - data string from bundle
- *
- * @return nothing
- */
-void wrt_reset_widget(int widget_handle, const char *bundleData);
-
-/**
- * @brief Set developer mode
- *
- * This method turns the developer mode on or off.
- * This enables or disables developer mode under which WAC test widgets can be installed
- * and executed by the developer.
- *
- * @param [in] mode - developer mode
- * set mode to 1 if you want to set developer mode. If not, set it to 0.
- * @param [in] callback - callback to be called when developer mode is ON
- * @param [in] userParam - user parameters to be passed to the callback
- *
- * @return Error status
- */
-int wrt_set_developer_mode(int mode,
- wrt_set_developer_mode_callback callback,
- void *userParam);
-
-/**
- * @brief Set compliance mode
- *
- * This method turns the compliance mode on or off.
- * This enables or disables compliance mode under which WAC
- * compliance widgets can be installed and executed by the user.
- *
- * @param [in] mode - compliance mode
- * set mode to 1 if you want to set compliance mode.
- * if not, set it to 0.
- * @param [in] callback - callback to be called when compliance mode is ON
- * @param [in] userParam - user parameters to be passed to the callback
- *
- * @return Error status
- */
-int wrt_set_compliance_mode(int mode,
- wrt_set_compliance_mode_callback callback,
- void *userParam);
-
-/**
- * @brief Set compliance mode fake IMEI
- *
- * This method changes device IMEI number.
- * New IMEI number is used during ACE validations when compliance mode is ON
- *
- * @param [in] imei - fake IMEI code
- * @param [in] callback - callback to be called when compliance
- * fake imei is set
- * @param [in] userParam - user parameters to be passed to the callback
- *
- * @return Error status
- */
-int wrt_set_compliance_fake_imei(const char *imei,
- wrt_set_compliance_fake_imei_callback callback,
- void *userParam);
-
-/**
- * @brief Set compliance mode fake MEID
- *
- * This method changes device MEID number.
- * New MEID number is used during ACE validations when compliance mode is ON
- *
- * @param [in] meid - fake MEID code
- * @param [in] callback - callback to be called when compliance
- * fake imei is set
- * @param [in] userParam - user parameters to be passed to the callback
- *
- * @return Error status
- */
-int wrt_set_compliance_fake_meid(const char *meid,
- wrt_set_compliance_fake_meid_callback callback,
- void *userParam);
-
-void wrt_force_stop(int widget_handle);
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* WRT_API_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_config.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file contains definitions of wrt config
- */
-#include <wrt_config.h>
-#include <string.h>
-#include <malloc.h>
-#include <export.h>
-#include <vconf.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-EXPORT_API int wrt_config_get_vendor(wrt_config_vendor_t *out_vendor)
-{
- *out_vendor = vconf_get_str(VCONFKEY_WEBRUNTIME_VENDOR_STR);
- return 0;
-}
-
-EXPORT_API int wrt_config_free_vendor(wrt_config_vendor_t *out_vendor)
-{
- free(const_cast<char *>(*out_vendor));
- *out_vendor = NULL;
- return 0;
-}
-
-EXPORT_API int wrt_config_get_name(wrt_config_name_t *out_name)
-{
- *out_name = vconf_get_str(VCONFKEY_WEBRUNTIME_NAME_STR);
- return 0;
-}
-
-EXPORT_API int wrt_config_free_name(wrt_config_name_t *out_name)
-{
- free(const_cast<char *>(*out_name));
- *out_name = NULL;
- return 0;
-}
-
-EXPORT_API int wrt_config_get_version(wrt_config_version_t *out_version)
-{
- *out_version = vconf_get_str(VCONFKEY_WEBRUNTIME_VERSION_STR);
- return 0;
-}
-
-EXPORT_API int wrt_config_free_version(wrt_config_version_t *out_version)
-{
- free(const_cast<char *>(*out_version));
- *out_version = NULL;
- return 0;
-}
-
-EXPORT_API int wrt_config_get_api(wrt_config_api_t *out_api)
-{
- *out_api = vconf_get_str(VCONFKEY_WEBRUNTIME_API_STR);
- return 0;
-}
-
-EXPORT_API int wrt_config_free_api(wrt_config_api_t *out_api)
-{
- free(const_cast<char *>(*out_api));
- *out_api = NULL;
- return 0;
-}
-
-#ifdef __cplusplus
-}
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_config.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file contains declarations of wrt config
- */
-#ifndef WRT_CONFIG_H
-#define WRT_CONFIG_H
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-typedef const char *wrt_config_vendor_t;
-
-int wrt_config_get_vendor(wrt_config_vendor_t *out_vendor);
-int wrt_config_free_vendor(wrt_config_vendor_t *out_vendor);
-
-typedef const char *wrt_config_name_t;
-
-int wrt_config_get_name(wrt_config_name_t *out_name);
-int wrt_config_free_name(wrt_config_name_t *out_name);
-
-typedef const char *wrt_config_version_t;
-
-int wrt_config_get_version(wrt_config_version_t *out_version);
-int wrt_config_free_version(wrt_config_version_t *out_version);
-
-typedef const char *wrt_config_api_t;
-
-int wrt_config_get_api(wrt_config_api_t *out_api);
-int wrt_config_free_api(wrt_config_api_t *out_api);
-
-/**
- * VConf access keys
- */
-#define VCONFKEY_WEBRUNTIME_PREFIX "db/webruntime"
-
-#define VCONFKEY_WEBRUNTIME_VENDOR_STR VCONFKEY_WEBRUNTIME_PREFIX "/vendor"
-#define VCONFKEY_WEBRUNTIME_NAME_STR VCONFKEY_WEBRUNTIME_PREFIX "/name"
-#define VCONFKEY_WEBRUNTIME_VERSION_STR VCONFKEY_WEBRUNTIME_PREFIX "/version"
-#define VCONFKEY_WEBRUNTIME_API_STR VCONFKEY_WEBRUNTIME_PREFIX "/api"
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* WRT_CONFIG_H */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_type.h
- * @author jihoon Chung (jihoon.Chung@samsung.com)
- * @version 1.0
- * @brief This file contains declarations of wrt api
- */
-
-/*
- * @defgroup wrt_engine_group WebRunTime engine Library
- * @ingroup internet_FW
- * Functions to APIs to access wrt-engine
- */
-
-#ifndef WRT_TYPE_H_
-#define WRT_TYPE_H_
-
-#include <stdbool.h>
-#include <stddef.h>
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#define WRT_DEPRECATED __attribute__((deprecated))
-
-typedef enum
-{
- /* Generic success */
- WRT_SUCCESS = 0, /*< Success*/
- WRT_ALREADY_INIT, /*< Wrt already initialized*/
- WRT_UPDATE_NEED, /*< Widget data has been updated*/
- WRT_SHUTDOWN, /*<WRT daemon has been closed*/
-
- /* Version result */
- WRT_VERSION_OLD = 128, /*< widget's version is older*/
- WRT_VERSION_NEW, /*< widget's version is latest*/
- WRT_VERSION_EXACT, /*< widget's version the same as in arg*/
- WRT_VERSION_NOT_COMPARABLE, /*< widget's version are not comparable */
-
- /* Error result */
- WRT_ERROR_INTERNAL = -128, /*< Internal library error.
- Should never occur */
- WRT_ERROR_INVALID_PARAMETER, /*< Invalid parameter value was given
- (eg. NULL) */
- WRT_ERROR_HANDLE_NOT_FOUND, /*< Widget handle was not found */
- WRT_ERROR_ID_NOT_FOUND, /*< Widget id was not found */
- WRT_ERROR_PKGNAME_NOT_FOUND, /*< package name was not found */
- WRT_ERROR_ALREADY_RUNNING, /*< Widget is already running */
- WRT_ERROR_ALREADY_STOPPED, /*< Widget is already stopped */
- WRT_ERROR_STILL_AUTHORIZING, /*< Widget is still autorizing and has not
- yet finished it */
- WRT_ERROR_EARLY_KILLED, /*< Widget was early killed during launch */
- WRT_ERROR_ACCESS_DENIED, /*< Access denied from ACE */
- WRT_ERROR_NOT_INITIALIZED, /*<Occur if wrt initialization fails*/
- WRT_ERROR_INIT, /*<Occur if wrt initialization fails*/
- WRT_ERROR_CONNECTION, /*<Connectiond error occured*/
- WRT_ERROR_NO_PATH, /*<One of specific directory does not
- exist*/
-
- /* Installer Errors*/
- WRT_INSTALLER_ERROR_INVALID_WIDGET_PACKAGE, /*< */
- WRT_INSTALLER_ERROR_WIDGET_DOES_NOT_EXIST, /*< */
- WRT_INSTALLER_ERROR_FACTORY_WIDGET, /*< Widget is factory installed,
- and cannot be uninstalled */
- WRT_INSTALLER_ERROR_ALREADY_UNINSTALLING, /*< Widget is already being
- uninstalled */
- WRT_INSTALLER_ERROR_OUT_OUT_DISK_SPACE, /*< */
- WRT_INSTALLER_ERROR_INVALID_CERTIFICATE, /*< */
- WRT_INSTALLER_ERROR_ALREADY_INSTALLED, /*< Widget is already installed
- */
- WRT_INSTALLER_ERROR_INTERNAL, /*< */
- WRT_INSTALLER_ERROR_NOT_ALLOWED, /*< Widget installation or
- update not allowed */
- /*< because violation of policy
- ocurred */
- WRT_INSTALLER_ERROR_DEFERRED, /*< Widget installation deferred
- */
- WRT_INSTALLER_ERROR_DATABASE_FAILURE, /*< Failure in database */
- WRT_INSTALLER_ERROR_UNKNOWN, /*< Temporary error. Try to not
- use this. */
- WRT_ERROR_INVALID_LANGUAGE, /*< Widget is not valid in
- current locales*/
-
- /* Plugin Installer Errors */
- WRT_PLUGIN_INSTALLER_ERROR_WRONG_PATH, /*< Wrong Path to plugin Dir */
- WRT_PLUGIN_INSTALLER_ERROR_METAFILE, /*< Plugin metafile error */
- WRT_PLUGIN_INSTALLER_ERROR_ALREADY_INSTALLED, /*< Plugin already installed*/
- WRT_PLUGIN_INSTALLER_ERROR_LIBRARY_ERROR, /*< Shared library error*/
- WRT_PLUGIN_INSTALLER_ERROR_WAITING, /*< Missing dependencies*/
- WRT_PLUGIN_INSTALLER_ERROR_LOCK, /*< Another installation
- in progress or lock file
- error*/
- WRT_PLUGIN_INSTALLER_ERROR_UNKNOWN /*< Unknown error*/
-} WrtErrStatus;
-
-typedef struct
-{
- char* id; /**< the widget's id
- (read from its config.xml during installation)*/
- char* name; /**< the widget's name
- (read from its config.xml during installation)*/
- char* version; /**< the widget's varsion
- (read from its config.xml during installation)*/
- char* icon_path; /**< the widget's icon_path
- (read from its config.xml during installation)*/
- char* pkg_name; /**< the widget's pkg name */
-
- /**< the widget's application storage size */
- size_t application_size;
- /**< the widget's data storage size */
- size_t data_size;
-} wrt_widget_info;
-
-typedef struct
-{
- char *src; /**< valid path to widget's icon*/
- int width; /**< the width of the icon in pixels*/
- int height; /**< the height of the icon in pixels*/
-} wrt_widget_icon;
-
-typedef struct
-{
- int width; /**< the width of the widget in pixels*/
- int height; /**< the height of the widget in pixels*/
-} wrt_widget_size;
-
-typedef struct
-{
- char *widget_name; /**< the widget's name*/
- wrt_widget_icon *widget_icon; /**< the widget's icon data*/
- wrt_widget_size widget_size; /**< the widget's size data*/
- wrt_widget_info *widget_info; /**< the widget's info data*/
-} wrt_widget_info_data;
-
-
-/**
- * @fn inline bool wrt_has_succeded(WrtErrStatus err)
- * @brief Checks whether call succeded
- *
- * This function checks whether call succeded.
- * If call succeded it returns TRUE.
- *
- * @param [in] err WrtErrStatus to check
- *
- * @return Result of the test
- * @retval TRUE - the call was successful
- * @retval FALSE - the call failed
- *
- * Sample code:
- * @code
- * static void InitCallback(WrtErrStatus status, void *data)
- * {
- * MyApplication *This = (MyApplication *)(data);
- *
- * printf("[LAUNCH-WIDGET] init callback");
- *
- * if (wrt_has_succeded(status) && status!=WRT_UPDATE_NEED)
- * {
- * This->InstallAllPlugins();
- *
- * if (This->m_argc == 2)
- * wrt_install_widget(This->m_argv[1], This, InstallCallback);
- * }
- * else if(wrt_has_failed(status))
- * printf("[LAUNCH-WIDGET] INITIALIZATION HAS FAILED");
- * }
- * @endcode
- *
- * @see wrt_has_failed
- */
-inline bool wrt_has_succeded(WrtErrStatus err)
-{
- return (err >= 0);
-}
-
-/**
- * @fn inline bool wrt_has_failed(WrtErrStatus err)
- * @brief Checks whether call failed
- *
- * This function checks whether call failed.
- * If call failed it returns TRUE.
- *
- * @param [in] err WrtErrStatus to check
- *
- * @return Result of the test
- * @retval TRUE - the call failed
- * @retval FALSE - the call was successful
- *
- * Sample code:
- * @code
- * static void InitCallback(WrtErrStatus status, void *data)
- * {
- * MyApplication *This = (MyApplication *)(data);
- *
- * printf("[LAUNCH-WIDGET] init callback");
- *
- * if (wrt_has_succeded(status) && status!=WRT_UPDATE_NEED)
- * {
- * This->InstallAllPlugins();
- *
- * if (This->m_argc == 2)
- * wrt_install_widget(This->m_argv[1], This, InstallCallback);
- * }
- * else if(wrt_has_failed(status))
- * printf("[LAUNCH-WIDGET] INITIALIZATION HAS FAILED");
- * }
- * @endcode
- *
- * @see wrt_has_succeded
- */
-inline bool wrt_has_failed(WrtErrStatus err)
-{
- return (err < 0);
-}
-
-#ifdef __cplusplus
-}
-#endif
-
-#endif /* WRT_TYPE_H_ */
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# Path for all tests binary files
-
-SET(ACE_TEST_PATH "/usr/apps/org.tizen.policy")
-
-INSTALL(FILES
- ${CMAKE_CURRENT_SOURCE_DIR}/configuration/config.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/configuration/config.dtd
- ${CMAKE_CURRENT_SOURCE_DIR}/configuration/bondixml.xsd
- ${CMAKE_CURRENT_SOURCE_DIR}/configuration/demo.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/configuration/WACPolicy.xml
- ${CMAKE_CURRENT_SOURCE_DIR}/configuration/UnrestrictedPolicy.xml
- DESTINATION /usr/etc/ace
- PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE)
-
-SET(ACE_LIB_DEPS_BASIC
- dpl-efl
- dpl-event-efl
- libxml-2.0
-)
-
-IF(SMACK_ENABLED)
- LIST(APPEND ACE_LIB_DEPS_BASIC libprivilege-control)
-ENDIF(SMACK_ENABLED)
-
-PKG_CHECK_MODULES(ACE_LIB_DEPS ${ACE_LIB_DEPS_BASIC} REQUIRED)
-
-SET(ACE_SOURCES
- ${WRT_ACE_DIR}/security_controller.cpp
- ${WRT_ACE_DIR}/security_logic.cpp
- ${WRT_ACE_DIR}/engine/AceUpdateEventMessages.cpp
- ${WRT_ACE_DIR}/engine/PolicyEvaluator.cpp
- ${WRT_ACE_DIR}/engine/PolicyInformationPoint.cpp
- ${WRT_ACE_DIR}/engine/logic/CombinerImpl.cpp
- ${WRT_ACE_DIR}/engine/xml/parser.cpp
- ${WRT_ACE_DIR}/logic/attribute_facade.cpp
- ${WRT_ACE_DIR}/logic/PolicyEnforcementPoint.cpp
- ${WRT_ACE_DIR}/logic/session_manager.cpp
- ${WRT_ACE_DIR}/logic/SettingsLogic.cpp
- ${WRT_ACE_DIR}/common/Attribute.cpp
- ${WRT_ACE_DIR}/common/Condition.cpp
- ${WRT_ACE_DIR}/common/NodeFactory.cpp
- ${WRT_ACE_DIR}/common/Policy.cpp
- ${WRT_ACE_DIR}/common/Rule.cpp
- ${WRT_ACE_DIR}/common/Serializer.cpp
- ${WRT_ACE_DIR}/common/Subject.cpp
- ${WRT_ACE_DIR}/common/TreeNode.cpp
- ${WRT_ACE_DIR}/common/simple_roaming_agent.cpp
- ${WRT_ACE_DIR}/common/UserDecisionTestStub.cpp
- ${WRT_ACE_DIR}/common/ConfigurationManager.cpp
- ${WRT_ACE_DIR}/ace_settings_logic.cpp
-)
-
-INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/common)
-INCLUDE_DIRECTORIES(${PROJECT_SOURCE_DIR}/src/localization)
-#
-# Ace settings server
-#
-SET(WITH_ACE_SETTINGS_SERVER_IPC_SOURCES
- ${WRT_ACE_DIR}/server/ipc/oim_generator.cpp
- ${WRT_ACE_DIR}/server/ipc/ace_settings_server_ipc.cpp
- ${WRT_ACE_DIR}/server/ipc/ace_settings_server_factory_ipc.cpp
-)
-
-SET(WITH_ACE_SETTINGS_SERVER_NONE_SOURCES
- ${WRT_ACE_DIR}/server/null/ace_settings_server_factory_null.cpp
-)
-
-SET(WITH_ACE_SETTINGS_SERVER_SOURCES
- ${WITH_ACE_SETTINGS_SERVER_NONE_SOURCES}
- )
-
-ADD_LIBRARY(${TARGET_ACE_LIB} SHARED
- ${ACE_SOURCES}
- ${WITH_ACE_SETTINGS_SERVER_SOURCES}
-)
-
-SET_TARGET_PROPERTIES(${TARGET_ACE_LIB} PROPERTIES
- SOVERSION ${PROJECT_VERSION})
-
-SET_TARGET_PROPERTIES(${TARGET_ACE_LIB} PROPERTIES
- COMPILE_FLAGS -fPIC)
-SET_TARGET_PROPERTIES(${TARGET_ACE_LIB} PROPERTIES
- COMPILE_FLAGS "-include profiling_util.h")
-
-TARGET_LINK_LIBRARIES(${TARGET_ACE_LIB}
- ${TARGET_WRT_DAO_RW_LIB} #For now WRT has to be RW - Global dao write is needed
- ${TARGET_ACE_DAO_RW_LIB}
- ${TARGET_PROFILING_LIB}
- ${ACE_LIB_DEPS_LIBRARIES}
-)
-
-INSTALL(TARGETS ${TARGET_ACE_LIB}
- DESTINATION lib
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
- GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
-)
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <dpl/event/event_delivery_injector.h>
-#include "AceUpdateEventMessages.h"
-
-EVENT_DELIVERY_IMPLEMENT_EVENT_MESSAGE(AceUpdateRequestEvent)
-EVENT_DELIVERY_IMPLEMENT_EVENT_MESSAGE(AceUpdateResponseEvent)
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef ACE_UPDATE_EVENT_MESSAGES_H
-#define ACE_UPDATE_EVENT_MESSAGES_H
-
-#include <dpl/event/event_delivery_messages.h>
-#include <string>
-
-typedef int ResponseParameter;
-
-EVENT_DELIVERY_DECLARE_EVENT_MESSAGE_1(AceUpdateRequestEvent, std::string)
-EVENT_DELIVERY_DECLARE_EVENT_MESSAGE_1(AceUpdateResponseEvent,
- ResponseParameter)
-
-#endif // ACE_UPDATE_EVENT_MESSAGES_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This class simply redirects the access requests to access control engine.
- * The aim is to hide access control engine specific details from WRT modules.
- * It also implements WRT_INTERFACE.h interfaces, so that ACE could access
- * WRT specific and other information during the decision making.
- *
- * @file session_manager.h
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @version 1.0
- * @brief Header file for session management like starting/invalidating
- */
-
-#include <session_manager.h>
-#include <dpl/log/log.h>
-
-#include <map>
-
-static const int SESSION_ID_LENGTH = 32;
-
-using namespace WrtDB;
-
-class SessionManager::Impl
-{
- public:
- std::map<SessionId, WidgetHandle> sessionIdWidgetIdMap;
- std::map<WidgetHandle, SessionId> widgetHandleSessionIdMap;
-
- Impl() {
- srandom(static_cast<int>(time(0)));
- }
-
- SessionId generate()
- {
- SessionId session_id = "";
- do {
- session_id = "";
- for (int i = 0; i < SESSION_ID_LENGTH; i++) {
- int c = random() % 16;
- session_id.append(1, c < 10 ? static_cast<char>('0' + c)
- : static_cast<char>('A' + c - 10));
- }
- }
- while (sessionIdWidgetIdMap.find(session_id) !=
- sessionIdWidgetIdMap.end());
- LogDebug("Generated session_id " << session_id);
- return session_id;
- }
-
- SessionId startNewSession (WidgetHandle widget_id)
- {
- SessionId session_id = generate();
- invalidateSession(widget_id); // in this order it is impossible to genreate the same session_id :)
-
- sessionIdWidgetIdMap[session_id] = widget_id;
- widgetHandleSessionIdMap[widget_id] = session_id;
-
- return session_id;
- }
-
- SessionId getSessionId (WidgetHandle widget_id)
- {
- if (widgetHandleSessionIdMap.find(widget_id) !=
- widgetHandleSessionIdMap.end()) {
- return widgetHandleSessionIdMap[widget_id];
- } else {
- return std::string("");
- }
- }
-
- void invalidateSession (WidgetHandle widget_id)
- {
- if (widgetHandleSessionIdMap.find(widget_id) !=
- widgetHandleSessionIdMap.end()) {
- SessionId session_id = widgetHandleSessionIdMap[widget_id];
- sessionIdWidgetIdMap.erase(session_id);
- widgetHandleSessionIdMap.erase(widget_id);
- }
- }
-
- void invalidateSession (SessionId session_id)
- {
- if (sessionIdWidgetIdMap.find(session_id) !=
- sessionIdWidgetIdMap.end()) {
- WidgetHandle widget_id = sessionIdWidgetIdMap[session_id];
- sessionIdWidgetIdMap.erase(session_id);
- widgetHandleSessionIdMap.erase(widget_id);
- }
- }
-};
-
-SessionManager::SessionManager()
-{
- impl = new SessionManager::Impl;
-}
-
-SessionManager::~SessionManager()
-{
- delete impl;
-}
-
-SessionId SessionManager::startNewSession (WidgetHandle widget_id)
-{
- LogDebug("startNewSession for widget_id " << widget_id);
- return impl->startNewSession(widget_id);
-}
-
-SessionId SessionManager::startNewSession (WidgetModel *model)
-{
- LogDebug("startNewSession for widget_id " << model->Handle.Get());
- return impl->startNewSession(model->Handle.Get());
-}
-
-SessionId SessionManager::getSessionId (WidgetHandle widget_id)
-{
- LogDebug(
- "GetSession for widget_id " << widget_id << " : " <<
- impl->getSessionId(widget_id));
- return impl->getSessionId(widget_id);
-}
-
-SessionId SessionManager::getSessionId (WidgetModel *model)
-{
- LogDebug("GetSession for widget_id " << model->Handle.Get() << " : " <<
- impl->getSessionId(model->Handle.Get()));
- return impl->getSessionId(model->Handle.Get());
-}
-
-void SessionManager::invalidateSession (WidgetHandle widget_id)
-{
- LogDebug("Invalidating by widget_id " << widget_id);
- impl->invalidateSession(widget_id);
-}
-
-void SessionManager::invalidateSession (WidgetModel *model)
-{
- LogDebug("Invalidating by widget_id " << model->Handle.Get());
- impl->invalidateSession(model->Handle.Get());
-}
-
-void SessionManager::invalidateSession (SessionId session_id)
-{
- LogDebug("Invalidating by session_id " << session_id);
- impl->invalidateSession(session_id);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This class simply redirects the access requests to access control engine.
- * The aim is to hide access control engine specific details from WRT modules.
- * It also implements WRT_INTERFACE.h interfaces, so that ACE could access
- * WRT specific and other information during the decision making.
- *
- * @file session_manager.h
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @version 1.0
- * @brief Header file for session management like starting/invalidating
- */
-
-#ifndef SESSION_MANAGER_H
-#define SESSION_MANAGER_H
-
-#include <widget_model.h>
-#include <dpl/noncopyable.h>
-#include <dpl/singleton.h>
-
-#include <string>
-
-typedef std::string SessionId;
-
-class SessionManager : private DPL::Noncopyable
-{
- public:
-
- SessionId startNewSession (WidgetHandle widget_id);
- SessionId startNewSession (WidgetModel *model);
-
- SessionId getSessionId (WidgetHandle widget_id);
- SessionId getSessionId (WidgetModel *model);
-
- void invalidateSession (WidgetHandle widget_id);
- void invalidateSession (WidgetModel *model);
- void invalidateSession (SessionId session_id);
-
- ~SessionManager();
- SessionManager();
- private:
- class Impl;
- Impl *impl;
-};
-#endif //SESSION_MANAGER_H
-
+++ /dev/null
-!!!options!!! stop
-ACE - Access Control Engine - security module for Device APIs
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_settings_logic.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is an implementation of server of ACE user preferences
- */
-#include <ace_settings_logic.h>
-#include <ace_settings_server_factory.h>
-#include <dpl/foreach.h>
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-//#include <widget_controller.h>
-#include <dpl/localization/w3c_file_localization.h>
-#include <dpl/ace/PolicyEnforcementPoint.h>
-#include <dpl/ace/PolicyEvaluator.h>
-#include <dpl/ace/Preference.h>
-#include <dpl/wrt-dao-rw/feature_dao.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <vector>
-#include <map>
-
-#include <dpl/ace-dao-rw/AceDAO.h>
-#include <dpl/ace/SettingsLogic.h>
-#include <dpl/wrt-dao-rw/global_dao.h>
-
-using namespace WrtDB;
-
-namespace // anonymous
-{
-struct SubjectResource
-{
- WidgetHandle subject; // app_id
- std::string resource;
-
- SubjectResource(WidgetHandle subjectArg,
- const std::string& resourceArg) :
- subject(subjectArg),
- resource(resourceArg)
- {
- }
-
- bool operator < (const SubjectResource& subjectResource) const
- {
- if (subject != subjectResource.subject) {
- return subject < subjectResource.subject;
- } else {
- return resource < subjectResource.resource;
- }
- }
-};
-
-typedef std::map<SubjectResource, Preference> WidgetResourcePreferenceMap;
-} // namespace anonymous
-
-AceSettingsLogic::AceSettingsLogic(
- PolicyEnforcementPoint *policyEnforcementPoint) :
- m_policyEnforcementPoint(policyEnforcementPoint)
-{
- // Acquire ACE settings server from factory
- m_server = AceSettingsServerFactory::Create(this);
-}
-
-AceSettings::WidgetsPreferences AceSettingsLogic::getWidgetsPreferences() const
-{
- AceSettings::WidgetsPreferences widgetsPreferences;
- WidgetHandleList widgetHandleList = WidgetDAOReadOnly::getHandleList();
-
- DPL::ScopedPtr<WidgetResourcePreferenceMap> preferenceMap;
-
- PermissionList permissionTriple;
- SettingsLogic::getWidgetDevCapSettings(&permissionTriple);
-
- preferenceMap.Reset(new WidgetResourcePreferenceMap());
-
- FOREACH(permission, permissionTriple)
- {
- LogInfo("In db: " << permission->appId <<
- " " << permission->devCap);
- SubjectResource sb(permission->appId,
- permission->devCap);
- preferenceMap->insert(std::make_pair(sb, permission->access));
- }
-
- LogInfo("Sending Widget Resources");
-
- FOREACH(handle, widgetHandleList)
- {
- AceSettings::SubjectResourcePreferences subjectResourcePreferences;
- WidgetDAOReadOnly widget(*handle);
-
- //This has to be redesigned how to gather localized name of widget
-// auto lang = widget.getDefaultlocale();
-// if (!lang) lang = DPL::FromASCIIString("en");
-// WidgetLocalizedInfo info =
-// widget.getLocalizedInfo(*lang);
-//
-// DPL::Optional<DPL::String> optionalName = info.name;
-//
-// if (!!optionalName) {
-// LogDebug("optional name: " << (*optionalName));
-// subjectResourcePreferences.subject =
-// DPL::ToUTF8String(*optionalName);
-// } else {
-// subjectResourcePreferences.subject = "";
-// }
-
- WidgetFeatureSet featureSet = widget.getFeaturesList();
- SubjectResource subjectResource(*handle, "");
-
- DeviceCapabilitySet deviceCaps;
-
- FOREACH(feature, featureSet)
- {
- DeviceCapabilitySet thisFeatureDeviceCaps =
- GlobalDAO::GetDeviceCapability(feature->name);
- deviceCaps.insert(thisFeatureDeviceCaps.begin(),
- thisFeatureDeviceCaps.end());
- }
-
- FOREACH(deviceCap, deviceCaps)
- {
- AceSettings::ResourcePreference resourcePreferences;
- resourcePreferences.resource = DPL::ToUTF8String(*deviceCap);
-
- subjectResource.resource = resourcePreferences.resource;
- LogInfo("Looking for: " << subjectResource.subject <<
- " " << subjectResource.resource);
-
- if (preferenceMap) {
- WidgetResourcePreferenceMap::const_iterator preference =
- preferenceMap->find(subjectResource);
-
- if (preference != preferenceMap->end()) {
- LogInfo("Found not default preference!!");
- resourcePreferences.preference = preference->second;
- } else {
- resourcePreferences.preference = Preference::PREFERENCE_DEFAULT;
- }
- } else {
- resourcePreferences.preference = Preference::PREFERENCE_DEFAULT;
- }
-
- LogInfo("Pushing back resource preference");
-
- subjectResourcePreferences.resourcesPreference.
- push_back(resourcePreferences);
- }
-
- widgetsPreferences.subjectsResourcePreferences.push_back(
- subjectResourcePreferences);
- }
-
- return widgetsPreferences;
-}
-
-AceSettings::ResourcesPreferences AceSettingsLogic::getResourcesPreferences()
-const
-{
- AceSettings::ResourcesPreferences resourcesPreferences;
- PreferenceMap preferenceMap;
-
- SettingsLogic::getDevCapSettings(&preferenceMap);
-
- FeatureHandleList featureList = FeatureDAOReadOnly::GetHandleList();
-
- FOREACH(featureName, featureList)
- {
- FeatureDAOReadOnly featureDao(*featureName);
-
- AceSettings::ResourcePreference resourcePreference;
- resourcePreference.resource = featureDao.GetName();
-
- PreferenceMap::const_iterator preference =
- preferenceMap.find(resourcePreference.resource);
-
- if (preference != preferenceMap.end()) {
- resourcePreference.preference = preference->second;
- } else {
- resourcePreference.preference = Preference::PREFERENCE_DEFAULT;
- }
-
- resourcesPreferences.resourcesPreference.push_back(resourcePreference);
- }
-
- return resourcesPreferences;
-}
-
-void AceSettingsLogic::setWidgetPreference(const std::string &resource,
- WidgetHandle handler,
- const Preference &preference)
-{
- SettingsLogic::setWidgetDevCapSetting(resource, handler, preference);
-}
-
-void AceSettingsLogic::setResourcePreference(const std::string &resource,
- const Preference &preference)
-{
- SettingsLogic::setDevCapSetting(resource, preference);
-}
-
-bool AceSettingsLogic::getWidgetsSecure() const
-{
- return GlobalDAO::GetSecureByDefault();
-}
-
-void AceSettingsLogic::setWidgetsSecure(bool widgetSecure)
-{
- GlobalDAO::SetSecureByDefault(widgetSecure);
-}
-
-void AceSettingsLogic::resetWidgetsPreferences()
-{
- AceDB::AceDAO::clearWidgetDevCapSettings();
-}
-
-void AceSettingsLogic::resetResourcesPreferences()
-{
- AceDB::AceDAO::clearDevCapSettings();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_settings_logic.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is a header of server of ACE user preferences
- */
-#ifndef WRT_SRC_ACCESS_CONTROL_IPC_SETTINGS_ACE_SETTINGS_LOGIC_H_
-#define WRT_SRC_ACCESS_CONTROL_IPC_SETTINGS_ACE_SETTINGS_LOGIC_H_
-
-#include <dpl/shared_ptr.h>
-#include <server/i_ace_settings_server.h>
-#include <server/i_ace_settings_client.h>
-#include <string>
-
-#include <wrt_db_types.h>
-
-class PolicyEnforcementPoint;
-
-class AceSettingsLogic
-{
- public:
- void setWidgetPreference(const std::string &resource,
- WidgetHandle handler,
- const AceDB::PreferenceTypes &preference);
-
- void setResourcePreference(const std::string &resource,
- const AceDB::PreferenceTypes &preference);
-
- AceSettings::WidgetsPreferences getWidgetsPreferences() const;
-
- AceSettings::ResourcesPreferences getResourcesPreferences() const;
-
- bool getWidgetsSecure() const;
-
- void setWidgetsSecure(bool widgetSecure);
-
- void resetWidgetsPreferences();
- void resetResourcesPreferences();
-
- private:
- AceSettingsLogic(PolicyEnforcementPoint *policyEnforcementPoint);
-
- friend class SecurityLogic;
- friend class PolicyEnforcementPoint;
-
- // PEP
- PolicyEnforcementPoint *m_policyEnforcementPoint;
-
- // Ace settings server (may be null)
- DPL::SharedPtr<IAceSettingsServer> m_server;
-};
-
-#endif // WRT_SRC_ACCESS_CONTROL_IPC_SETTINGS_ACE_SETTINGS_LOGIC_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- *
- * This file contains classes that implement WRT_INTERFACE.h interfaces,
- * so that ACE could access WRT specific and other information during
- * the decision making.
- *
- * @file attribute_.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @author Ming Jin(ming79.jin@samsung.com)
- * @version 1.0
- * @brief Implementation file for attributes obtaining.
- */
-
-#include <dpl/exception.h>
-#include <sstream>
-#include <algorithm>
-#include <list>
-#include <string>
-#include <sstream>
-#include <stdexcept>
-#include <map>
-#include <cstdlib>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <dpl/wrt-dao-rw/feature_dao.h>
-#include <dpl/ace/WRT_INTERFACE.h>
-#include <map>
-#include <dpl/log/log.h>
-#include <attribute_facade.h>
-#include <dpl/ace/Request.h>
-#include <simple_roaming_agent.h>
-
-using namespace WrtDB;
-
-namespace // anonymous
-{
-typedef std::list<std::string> AttributeHandlerResponse;
-
-typedef AttributeHandlerResponse (*AttributeHandler)(
- const WidgetExecutionPhase &phase,
- const WidgetHandle &widgetHandle);
-typedef AttributeHandlerResponse (*ResourceAttributeHandler)(
- const WidgetExecutionPhase &phase,
- const WidgetHandle &widgetHandle,
- const Request &request);
-
-AttributeHandlerResponse AttributeClassHandler(const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle & /*widgetHandle*/)
-{
- AttributeHandlerResponse response;
- response.push_back("widget");
- return response;
-}
-
-AttributeHandlerResponse AttributeInstallUriHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- std::string value = dao.getShareHref();
-
- if (!value.empty()) {
- response.push_back(value);
- }
-
- return response;
-}
-
-AttributeHandlerResponse AttributeVersionHandler(const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- DPL::Optional<DPL::String> value = dao.getVersion();
-
- if (!!value) {
- response.push_back(DPL::ToUTF8String(*value));
- }
-
- return response;
-}
-
-AttributeHandlerResponse AttributeDistributorKeyCnHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- response = dao.getKeyCommonNameList(WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ENDENTITY);
-
- return response;
-}
-
-AttributeHandlerResponse AttributeDistributorKeyFingerprintHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- response = dao.getKeyFingerprints(WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ENDENTITY);
-
- return response;
-}
-
-AttributeHandlerResponse AttributeDistributorKeyRootCnHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- response = dao.getKeyCommonNameList(WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ROOT);
-
- return response;
-}
-
-AttributeHandlerResponse AttributeDistributorKeyRootFingerprintHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- response = dao.getKeyFingerprints(WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ROOT);
-
- return response;
-}
-
-AttributeHandlerResponse AttributeAuthorKeyCnHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- response = dao.getKeyCommonNameList(WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY);
-
- return response;
-}
-
-AttributeHandlerResponse AttributeAuthorKeyFingerprintHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- response = dao.getKeyFingerprints(WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY);
-
- return response;
-}
-
-AttributeHandlerResponse AttributeAuthorKeyRootCnHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- response = dao.getKeyCommonNameList(WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ROOT);
-
- return response;
-}
-
-AttributeHandlerResponse AttributeAuthorKeyRootFingerprintHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- response = dao.getKeyFingerprints(WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ROOT);
-
- return response;
-}
-
-AttributeHandlerResponse AttributeNetworkAccessUriHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle & /*widgetHandle*/)
-{
- AttributeHandlerResponse response;
- return response;
-}
-
-AttributeHandlerResponse AttributeIdHandler(const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
- WidgetGUID wGUID = dao.getGUID();
-
- if (!!wGUID) {
- response.push_back(DPL::ToUTF8String(*wGUID));
- }
- return response;
-}
-
-//AttributeHandlerResponse AttributeNameHandler(const WidgetExecutionPhase & /*phase*/,
-// const WidgetHandle &widgetHandle)
-//{
-// AttributeHandlerResponse response;
-//
-// WidgetLocalizedInfo info =
-// W3CFileLocalization::getLocalizedInfo(widgetHandle);
-//
-// DPL::Optional<DPL::String> val = info.name;
-// std::string value = !!val ? DPL::ToUTF8String(*val) : "";
-//
-// response.push_back(value);
-// return response;
-//}
-//
-//AttributeHandlerResponse AttributeWidgetAttrNameHandler(
-// const WidgetExecutionPhase & /*phase*/,
-// const WidgetHandle &widgetHandle)
-//{
-// AttributeHandlerResponse response;
-//
-// WidgetLocalizedInfo info =
-// W3CFileLocalization::getLocalizedInfo(widgetHandle);
-//
-// DPL::Optional<DPL::String> value = info.name;
-//
-// if (!!value) {
-// response.push_back(DPL::ToUTF8String(*value));
-// }
-//
-// return response;
-//}
-
-AttributeHandlerResponse AttributeAuthorNameHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle)
-{
- AttributeHandlerResponse response;
- WidgetDAOReadOnly dao(widgetHandle);
-
- DPL::Optional<DPL::String> value = dao.getAuthorName();
-
- if (!!value) {
- response.push_back(DPL::ToUTF8String(*value));
- }
-
- return response;
-}
-
-AttributeHandlerResponse AttributeRoamingHandler(
- const WidgetExecutionPhase &phase,
- const WidgetHandle & /*widgetHandle*/)
-{
- AttributeHandlerResponse response;
-
- if (WidgetExecutionPhase_WidgetInstall == phase) {
- // TODO undetermind value
- response.push_back(std::string(""));
- } else if (SimpleRoamingAgentSingleton::Instance().IsRoamingOn()) {
- response.push_back(std::string("true"));
- } else {
- response.push_back(std::string("false"));
- }
-
- return response;
-}
-
-AttributeHandlerResponse AttributeBearerTypeHandler(
- const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle & /*widgetHandle*/)
-{
- AttributeHandlerResponse response;
-
- std::string bearerName = "undefined-bearer-name";
-
- if (bearerName.empty()) {
- LogWarning("Bearer-type is NOT SET or empty");
- } else {
- response.push_back(bearerName);
- }
-
- return response;
-}
-
-struct AttributeHandlerContext
-{
- std::string name;
- WidgetExecutionPhase allowedPhaseMask;
- AttributeHandler handler;
-};
-
-// Private masks
-const WidgetExecutionPhase WidgetExecutionPhase_All =
- static_cast<WidgetExecutionPhase>(
- WidgetExecutionPhase_WidgetInstall |
- WidgetExecutionPhase_WidgetInstantiate |
- WidgetExecutionPhase_WebkitBind |
- WidgetExecutionPhase_Invoke);
-const WidgetExecutionPhase WidgetExecutionPhase_NoWidgetInstall =
- static_cast<WidgetExecutionPhase>(
- WidgetExecutionPhase_WidgetInstantiate |
- WidgetExecutionPhase_WebkitBind |
- WidgetExecutionPhase_Invoke);
-
-#define ALL_PHASE(name, handler) \
- { # name, WidgetExecutionPhase_All, handler },
-
-#define NO_INSTALL(name, handler) \
- { # name, WidgetExecutionPhase_NoWidgetInstall, handler },
-
-AttributeHandlerContext HANDLED_ATTRIBUTES_LIST[] = {
- ALL_PHASE(Class, &AttributeClassHandler)
- ALL_PHASE(install-uri, &AttributeInstallUriHandler)
- ALL_PHASE(version, &AttributeVersionHandler)
- ALL_PHASE(distributor-key-cn, &AttributeDistributorKeyCnHandler)
- ALL_PHASE(distributor-key-fingerprint,
- &AttributeDistributorKeyFingerprintHandler)
- ALL_PHASE(distributor-key-root-cn,
- &AttributeDistributorKeyRootCnHandler)
- ALL_PHASE(distributor-key-root-fingerprint,
- &AttributeDistributorKeyRootFingerprintHandler)
- ALL_PHASE(author-key-cn, &AttributeAuthorKeyCnHandler)
- ALL_PHASE(author-key-fingerprint, &AttributeAuthorKeyFingerprintHandler)
- ALL_PHASE(author-key-root-cn, &AttributeAuthorKeyRootCnHandler)
- ALL_PHASE(author-key-root-fingerprint,
- &AttributeAuthorKeyRootFingerprintHandler)
- ALL_PHASE(network-access-uri, &AttributeNetworkAccessUriHandler)
- ALL_PHASE(id, &AttributeIdHandler)
-// ALL_PHASE(name, &AttributeNameHandler)
-// ALL_PHASE(widget-attr:name, &AttributeWidgetAttrNameHandler)
- ALL_PHASE(author-name, &AttributeAuthorNameHandler)
- /* Enviroment attributes*/
- NO_INSTALL(roaming, &AttributeRoamingHandler)
- NO_INSTALL(bearer-type, &AttributeBearerTypeHandler)
-};
-
-#undef ALL_PHASE
-#undef NO_INSTALL
-
-const size_t HANDLED_ATTRIBUTES_LIST_COUNT =
- sizeof(HANDLED_ATTRIBUTES_LIST) / sizeof(HANDLED_ATTRIBUTES_LIST[0]);
-
-template<class T>
-class lambdaCollectionPusher
-{
- public:
- std::list<T>& m_collection;
- lambdaCollectionPusher(std::list<T>& collection) : m_collection(collection)
- {
- }
- void operator()(const T& element) const
- {
- m_collection.push_back(element);
- }
-};
-
-class lambdaWidgetPrefixEquality :
- public std::binary_function<WidgetFeature, std::string, bool>
-{
- public:
- bool operator()(const WidgetFeature& wFeature,
- const std::string& prefix) const
- {
- return wFeature.name.find(DPL::FromUTF8String(prefix)) !=
- DPL::String::npos;
- }
-};
-
-class lambdaWidgetNameEquality :
- public std::binary_function<WidgetFeature, std::string, bool>
-{
- public:
- bool operator()(const WidgetFeature& wFeature,
- const std::string& prefix) const
- {
- return wFeature.name == DPL::FromUTF8String(prefix);
- }
-};
-
-FeatureHandleList getFeatureHandleList(const WidgetHandle& widgetHandle,
- const std::string& resourceId)
-{
- FeatureHandleList featureHandleList;
- WidgetDAOReadOnly widgetDAO(widgetHandle);
- WidgetFeatureSet wFeatureSet = widgetDAO.getFeaturesList();
- WidgetFeatureSet::iterator foundFeatures =
- std::find_if(wFeatureSet.begin(),
- wFeatureSet.end(),
- std::bind2nd(lambdaWidgetPrefixEquality(), resourceId));
-
- if (foundFeatures != wFeatureSet.end()) {
- FeatureDAOReadOnly featureDAO(resourceId);
- featureHandleList.push_back(featureDAO.GetFeatureHandle());
- }
- return featureHandleList;
-}
-
-AttributeHandlerResponse AttributeDeviceCapHandler(const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle & /*widgetHandle*/,
- const Request &request)
-{
- AttributeHandlerResponse response;
-
- Request::DeviceCapabilitySet capSet = request.getDeviceCapabilitySet();
-
- std::for_each(
- capSet.begin(),
- capSet.end(),
- lambdaCollectionPusher<std::string>(response));
-
- return response;
-
- // We should return list of device-caps required by resourceId.
- // AttributeHandlerResponse response;
- //
- // FeatureHandleList fHandleList =
- // getFeatureHandleList(widgetHandle, resourceId);
- // if( !fHandleList.empty() )
- // {
- // FeatureDAO feature( resourceId );
- // std::set<std::string> deviceCapLast =
- // feature.GetDeviceCapabilities();
- // std::for_each(
- // deviceCapList.begin(),
- // deviceCapList.end(),
- // lambdaCollectionPusher<DeviceCapList::value_type>(
- // response) );
- // }
- // return response;
-}
-
-class lambdaFeatureEquality :
- public std::binary_function<FeatureHandle, int, bool>
-{
- public:
- bool operator()(const FeatureHandle& wFeature,
- const int& resurceId) const
- {
- return wFeature == resurceId;
- }
-};
-
-class lambdaPushFeatureName :
- public std::binary_function<WidgetFeature, AttributeHandlerResponse, void>
-{
- void operator()(const WidgetFeature& wFeature,
- AttributeHandlerResponse& response) const
- {
- response.push_back(DPL::ToUTF8String(wFeature.name));
- }
-};
-
-AttributeHandlerResponse AttributeApiFeatureHandler(
- const WidgetExecutionPhase & /* phase */,
- const WidgetHandle & /* widgetHandle */,
- const Request & /* request */)
-{
- LogDebug("WAC 2.0 does not support api-feature and resource-id in policy.");
- AttributeHandlerResponse response;
- return response;
- // Wrt shouldn't ask about resource which is not listed in
- // (widget) config.xml file
- //
- // AttributeHandlerResponse response;
- // WidgetDAOReadOnly widgetDAO(widgetHandle);
- // WidgetFeatureSet wFeatureSet = widgetDAO.GetFeaturesList();
- // std::string featureName = resourceId;
- // WidgetFeatureSet::iterator foundFeatures =
- // std::find_if(wFeatureSet.begin(),
- // wFeatureSet.end(),
- // std::bind2nd(lambdaWidgetPrefixEquality(),
- // featureName));
- //
- // while( foundFeatures != wFeatureSet.end() )
- // {
- // response.push_back( foundFeatures->name );
- // LogDebug("Found feature: " << foundFeatures->name );
- // foundFeatures++;
- // }
- //
- // return response;
-}
-
-typedef std::string (FeatureDAOReadOnly::*FNMETHOD)() const;
-
-AttributeHandlerResponse GetFeatureAttributeGroup(const WidgetExecutionPhase & /*phase*/,
- const WidgetHandle &widgetHandle,
- const std::string& resourceId,
- FNMETHOD function)
-{
- AttributeHandlerResponse response;
- FeatureHandleList fHandleList =
- getFeatureHandleList(widgetHandle, resourceId);
- if (!fHandleList.empty()) {
- FeatureDAOReadOnly featureDAO(fHandleList.front());
- std::string attribute = (featureDAO.*function)();
- response.push_back(attribute);
- }
- return response;
-}
-
-AttributeHandlerResponse AttributeFeatureInstallUriHandler(
- const WidgetExecutionPhase & /* phase */,
- const WidgetHandle & /* widgetHandle */,
- const Request & /* request */)
-{
- LogDebug("WAC 2.0 does not support feature-install-uri is policy!");
- AttributeHandlerResponse response;
- return response;
-}
-
-AttributeHandlerResponse AttributeFeatureFeatureKeyCnHandler(
- const WidgetExecutionPhase & /* phase */,
- const WidgetHandle & /* widgetHandle */,
- const Request & /* request */)
-{
- LogDebug("WAC 2.0 does not support feature-key-cn is policy!");
- AttributeHandlerResponse response;
- return response;
-}
-
-AttributeHandlerResponse AttributeFeatureKeyRootCnHandler(
- const WidgetExecutionPhase & /* phase */,
- const WidgetHandle & /* widgetHandle */,
- const Request & /* request */)
-{
- LogDebug("WAC 2.0 does not support feature-key-root-cn is policy!");
- AttributeHandlerResponse response;
- return response;
-}
-
-AttributeHandlerResponse AttributeFeatureKeyRootFingerprintHandler(
- const WidgetExecutionPhase & /* phase */,
- const WidgetHandle & /* widgetHandle */,
- const Request & /* request */)
-{
- LogDebug("WAC 2.0 does not support"
- " feature-key-root-fingerprint is policy!");
- AttributeHandlerResponse response;
- return response;
-}
-
-struct ResourceAttributeHandlerContext
-{
- std::string name;
- WidgetExecutionPhase allowedPhaseMask;
- ResourceAttributeHandler handler;
-};
-
-#define ALL_PHASE(name, handler) \
- { # name, WidgetExecutionPhase_All, handler },
-
-ResourceAttributeHandlerContext HANDLED_RESOURCE_ATTRIBUTES_LIST[] = {
- ALL_PHASE(device-cap, &AttributeDeviceCapHandler)
- ALL_PHASE(api-feature, &AttributeApiFeatureHandler)
- // For compatiblity with older policies we tread resource-id
- // identically as api-feature
- ALL_PHASE(resource-id, &AttributeApiFeatureHandler)
-
- ALL_PHASE(feature-install-uri, &AttributeFeatureInstallUriHandler)
- ALL_PHASE(feature-key-cn, &AttributeFeatureFeatureKeyCnHandler)
- ALL_PHASE(feature-key-root-cn, &AttributeFeatureKeyRootCnHandler)
- ALL_PHASE(feature-key-root-fingerprint,
- &AttributeFeatureKeyRootFingerprintHandler)
-};
-
-#undef ALL_PHASE
-
-const size_t HANDLED_RESOURCE_ATTRIBUTES_LIST_COUNT =
- sizeof(HANDLED_RESOURCE_ATTRIBUTES_LIST) /
- sizeof(HANDLED_RESOURCE_ATTRIBUTES_LIST[0]);
-} // namespace anonymous
-
-/*
- * class WebRuntimeImpl
- */
-int WebRuntimeImpl::getAttributesValuesLoop(const Request &request,
- std::list<ATTRIBUTE>* attributes,
- WidgetExecutionPhase executionPhase)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- WidgetHandle widgetHandle = request.getWidgetHandle();
-
- FOREACH(itr, *attributes)
- {
- // Get attribute name
- std::string attribute = *itr->first;
-
- // Search for attribute handler
- bool attributeFound = false;
-
- for (size_t i = 0; i < HANDLED_ATTRIBUTES_LIST_COUNT; ++i) {
- if (HANDLED_ATTRIBUTES_LIST[i].name == attribute) {
- // Check if execution phase is valid
- if ((executionPhase &
- HANDLED_ATTRIBUTES_LIST[i].allowedPhaseMask) == 0) {
- // Attribute found, but execution state
- // forbids to execute handler
- LogWarning(
- "Request for attribute: '" <<
- attribute << "' which is supported " <<
- "but forbidden at widget execution phase: "
- <<
- executionPhase);
- } else {
- // Execution phase allows handler
- AttributeHandlerResponse attributeResponse =
- (*HANDLED_ATTRIBUTES_LIST[i].handler)(
- executionPhase,
- widgetHandle);
- std::copy(attributeResponse.begin(),
- attributeResponse.end(),
- std::back_inserter(*itr->second));
- }
-
- attributeFound = true;
- break;
- }
- }
-
- if (!attributeFound) {
- LogWarning("Request for attribute: '" <<
- attribute << "' which is not supported");
- }
- }
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-int WebRuntimeImpl::getAttributesValues(const Request &request,
- std::list<ATTRIBUTE>* attributes)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- // Get current execution state
- WidgetExecutionPhase executionPhase =
- request.getExecutionPhase();
-
- return getAttributesValuesLoop(request, attributes, executionPhase);
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-std::string WebRuntimeImpl::getSessionId(const Request & /* request */)
-{
- std::string result;
- LogError("Not implemented!");
- return result;
-}
-
-WebRuntimeImpl::WebRuntimeImpl()
-{
-}
-
-/*
- * class ResourceInformationImpl
- */
-
-int ResourceInformationImpl::getAttributesValuesLoop(const Request &request,
- std::list<ATTRIBUTE>* attributes,
- WidgetExecutionPhase executionPhase)
-{
- // Currently, we assume widgets have internal representation of integer IDs
- WidgetHandle widgetHandle = request.getWidgetHandle();
- //TODO add resource id string analyzys
- FOREACH(itr, *attributes)
- {
- // Get attribute name
- std::string attribute = *itr->first;
-
- // Search for attribute handler
- bool attributeFound = false;
-
- for (size_t i = 0; i < HANDLED_RESOURCE_ATTRIBUTES_LIST_COUNT; ++i) {
- if (HANDLED_RESOURCE_ATTRIBUTES_LIST[i].name == attribute) {
- // Check if execution phase is valid
- if ((executionPhase &
- HANDLED_RESOURCE_ATTRIBUTES_LIST[i].allowedPhaseMask) ==
- 0) {
- // Attribute found, but execution state
- // forbids to execute handler
- LogDebug(
- "Request for attribute: '" <<
- attribute <<
- "' which is supported but forbidden " <<
- "at widget execution phase: " << executionPhase);
- itr->second = NULL;
- } else {
- // Execution phase allows handler
- AttributeHandlerResponse attributeResponse =
- (*HANDLED_RESOURCE_ATTRIBUTES_LIST[i].handler)(
- executionPhase,
- widgetHandle,
- request);
- std::copy(attributeResponse.begin(),
- attributeResponse.end(),
- std::back_inserter(*itr->second));
-
- std::ostringstream attributeResponseFull;
-
- for (AttributeHandlerResponse::const_iterator
- it = attributeResponse.begin();
- it != attributeResponse.end(); ++it) {
- attributeResponseFull <<
- (it == attributeResponse.begin() ? "" : ", ") <<
- *it;
- }
-
- LogDebug("Attribute(" << attribute << ") = " <<
- attributeResponseFull.str());
- }
-
- attributeFound = true;
- break;
- }
- }
-
- if (!attributeFound) {
- LogWarning("Request for attribute: '" << attribute <<
- "' which is not supported");
- }
- }
- return 0;
-}
-
-int ResourceInformationImpl::getAttributesValues(const Request &request,
- std::list<ATTRIBUTE>* attributes)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- // Get current execution state
- WidgetExecutionPhase executionPhase =
- request.getExecutionPhase();
- return getAttributesValuesLoop(request, attributes, executionPhase);
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-ResourceInformationImpl::ResourceInformationImpl()
-{
-}
-
-/*
- * class OperationSystemImpl
- */
-
-int OperationSystemImpl::getAttributesValues(const Request &request,
- std::list<ATTRIBUTE>* attributes)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- //FIXME:
- //GetExecution name without widget name
- WidgetExecutionPhase executionPhase =
- request.getExecutionPhase();
-
- FOREACH(itr, *attributes)
- {
- // Get attribute name
- std::string attribute = *itr->first;
-
- // Search for attribute handler
- bool attributeFound = false;
-
- for (size_t i = 0; i < HANDLED_ATTRIBUTES_LIST_COUNT; ++i) {
- if (HANDLED_ATTRIBUTES_LIST[i].name == attribute) {
- // Check if execution phase is valid
- if ((executionPhase &
- HANDLED_ATTRIBUTES_LIST[i].allowedPhaseMask) == 0) {
- // Attribute found, but execution state forbids
- // to execute handler
- LogDebug("Request for attribute: '" << attribute <<
- "' which is supported but forbidden at " <<
- "widget execution phase: " << executionPhase);
- itr->second = NULL;
- } else {
- // Execution phase allows handler
- AttributeHandlerResponse attributeResponse =
- (*HANDLED_ATTRIBUTES_LIST[i].handler)(
- executionPhase,
- 0);
- std::copy(attributeResponse.begin(),
- attributeResponse.end(),
- std::back_inserter(*itr->second));
-
- std::ostringstream attributeResponseFull;
-
- typedef AttributeHandlerResponse::const_iterator Iter;
- FOREACH(it, attributeResponse)
- {
- attributeResponseFull <<
- (it == attributeResponse.begin()
- ? "" : ", ") << *it;
- }
-
- LogDebug("Attribute(" << attribute <<
- ") = " << attributeResponseFull.str());
- }
-
- attributeFound = true;
- break;
- }
- }
-
- if (!attributeFound) {
- LogWarning("Request for attribute: '" << attribute <<
- "' which is not supported");
- }
- }
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-OperationSystemImpl::OperationSystemImpl()
-{
-}
-
-/*
- * end of class OperationSystemImpl
- */
-
-int FunctionParamImpl::getAttributesValues(const Request & /*request*/,
- std::list<ATTRIBUTE> *attributes)
-{
- FOREACH(iter, *attributes)
- {
- std::string attributeName = *(iter->first);
-
- ParamMap::const_iterator i;
- std::pair<ParamMap::const_iterator, ParamMap::const_iterator> jj =
- paramMap.equal_range(attributeName);
-
- for (i = jj.first; i != jj.second; ++i) {
- iter->second->push_back(i->second);
- LogDebug("Attribute: " << attributeName << " Value: " <<
- i->second);
- }
- }
- return 0;
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file attribute_facade.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file contains the declaration of WebRuntimeImpl,
- * ResourceInformationImpl, OperationSystemImpl
- */
-
-#ifndef ATTRIBUTE_FACADE_H
-#define ATTRIBUTE_FACADE_H
-
-#include <string>
-#include <map>
-#include <vector>
-
-#include <dpl/ace/WRT_INTERFACE.h>
-
-class Request;
-
-class WebRuntimeImpl : public IWebRuntime
-{
- public:
- // Return current sessionId
- int getAttributesValuesLoop(const Request &request,
- std::list<ATTRIBUTE>* attributes,
- WidgetExecutionPhase executionPhase);
-
- int getAttributesValues(const Request &request,
- std::list<ATTRIBUTE>* attributes);
- virtual std::string getSessionId(const Request &request);
- WebRuntimeImpl();
-};
-
-class ResourceInformationImpl : public IResourceInformation
-{
- public:
- int getAttributesValuesLoop(const Request &request,
- std::list<ATTRIBUTE>* attributes,
- WidgetExecutionPhase executionPhase);
- int getAttributesValues(const Request &request,
- std::list<ATTRIBUTE>* attributes);
- ResourceInformationImpl();
-};
-
-class OperationSystemImpl : public IOperationSystem
-{
- public:
- /**
- * gather and set attributes values for specified attribute name
- * @param attributes is a list of pairs(
- * first: pointer to attribute name
- * second: list of values for attribute (std::string) -
- * its a list of string (BONDI requirement), but usually there
- * will be only one string
- */
- int getAttributesValues(const Request &request,
- std::list<ATTRIBUTE>* attributes);
- OperationSystemImpl();
-};
-
-class FunctionParamImpl : public IFunctionParam
-{
- public:
- virtual int getAttributesValues(const Request & /*request*/,
- std::list<ATTRIBUTE> *attributes);
- void addAttribute(const std::string &key,
- const std::string &value)
- {
- paramMap.insert(make_pair(key, value));
- }
- virtual ~FunctionParamImpl()
- {
- }
-
- private:
- typedef std::multimap<std::string, std::string> ParamMap;
- ParamMap paramMap;
-};
-
-typedef std::vector <FunctionParamImpl> FunctionParams;
-
-#endif //ATTRIBUTE_FACADE_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file i_ace_settings.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief This is header file for preference settings interface between
- * security controller and clients
- */
-
-#ifndef WRT_SRC_ACCESS_CONTROL_I_ACE_PERMISSSIONS_H_
-#define WRT_SRC_ACCESS_CONTROL_I_ACE_PERMISSSIONS_H_
-
-#include <vector>
-#include <dpl/ace-dao-ro/PreferenceTypes.h>
-
-namespace AceSettings {
-
-struct ResourcePreference
-{
- std::string resource;
- AceDB::PreferenceTypes preference;
-
- ResourcePreference()
- {
- }
-
- ResourcePreference(const std::string &resourceArg,
- const AceDB::PreferenceTypes &preferenceArg) :
- resource(resourceArg),
- preference(preferenceArg)
- {
- }
-};
-
-struct SubjectResourcePreferences
-{
- std::string subject;
- std::vector<ResourcePreference> resourcesPreference;
-
- SubjectResourcePreferences()
- {
- }
-
- SubjectResourcePreferences(
- const std::string &subjectArg,
- const std::vector<ResourcePreference> &resourcesPreferenceArg) :
- subject(subjectArg),
- resourcesPreference(resourcesPreferenceArg)
- {
- }
-};
-
-struct WidgetsPreferences
-{
- std::vector<SubjectResourcePreferences> subjectsResourcePreferences;
-};
-
-struct ResourcesPreferences
-{
- std::vector<ResourcePreference> resourcesPreference;
-};
-
-} // end of namespace AceSettings
-
-#endif /* WRT_SRC_ACCESS_CONTROL_I_ACE_PERMISSSIONS_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This class simply redirects the access requests to access control engine.
- * The aim is to hide access control engine specific details from WRT modules.
- * It also implements WRT_INTERFACE.h interfaces, so that ACE could access
- * WRT specific and other information during the decision making.
- *
- * @file security_controller.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @author Ming Jin(ming79.jin@samsung.com)
- * @version 1.0
- * @brief Implementation file for security controller
- */
-#include <security_controller.h>
-
-#include <dpl/ace/PolicyEnforcementPoint.h>
-#include <dpl/ace/WRT_INTERFACE.h>
-#include <dpl/ace/PolicyEvaluatorFactory.h>
-#include <dpl/singleton_impl.h>
-#include <dpl/log/log.h>
-
-#include <attribute_facade.h>
-#include <security_logic.h>
-
-IMPLEMENT_SINGLETON(SecurityController)
-
-struct SecurityController::Impl
-{
- SecurityLogic logic;
-};
-
-SecurityController::SecurityController()
-{
- m_impl.Reset(new Impl);
-}
-
-SecurityController::~SecurityController()
-{
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::InitializeSyncEvent & /* event */)
-{
- m_impl->logic.initialize();
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::TerminateSyncEvent & /*event*/)
-{
- m_impl->logic.terminate();
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::AuthorizeWidgetInstallEvent &event)
-{
- m_impl->logic.authorizeWidgetInstall(event.GetArg0(), event.GetArg1());
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::CheckFunctionCallSyncEvent &ev)
-{
- *ev.GetArg0() = m_impl->logic.checkFunctionCall(ev.GetArg1());
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::SetWidgetPreferenceEvent & /*event*/)
-{
-// m_impl->logic.setWidgetPreference(event.GetArg0(),
-// event.GetArg1(),
-// event.GetArg2());
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::SetResourcePreferenceEvent & /*event*/)
-{
-// m_impl->logic.setResourcePreference(event.GetArg0(), event.GetArg1());
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::GetWidgetsPreferencesSyncEvent & /*event*/)
-{
-// *event.GetArg0() = m_impl->logic.getWidgetsPreferences();
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::GetResourcesPreferencesSyncEvent & /*event*/)
-{
-// *event.GetArg0() = m_impl->logic.getResourcesPreferences();
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::ResetWidgetsPreferencesEvent & /*evt*/)
-{
-// m_impl->logic.resetWidgetsPreferences();
-}
-
-void SecurityController::OnEventReceived(
- const SecurityControllerEvents::ResetResourcesPreferencesEvent & /*evt*/)
-{
-// m_impl->logic.resetResourcesPreferences();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This class simply redirects the access requests to access control engine.
- * The aim is to hide access control engine specific details from WRT modules.
- * It also implements WRT_INTERFACE.h interfaces, so that ACE could access
- * WRT specific and other information during the decision making.
- *
- * @file security_controller.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @author Ming Jin(ming79.jin@samsung.com)
- * @version 1.0
- * @brief Header file for security controller
- */
-#ifndef SECURITY_CONTROLLER_H
-#define SECURITY_CONTROLLER_H
-
-#include <dpl/singleton.h>
-#include <dpl/event/controller.h>
-#include <dpl/generic_event.h>
-#include <dpl/scoped_ptr.h>
-#include <dpl/type_list.h>
-#include <string>
-#include <ace_settings_logic.h>
-#include <dpl/ace-dao-ro/PreferenceTypes.h>
-#include <dpl/ace/AbstractPolicyEnforcementPoint.h>
-
-#include <string>
-#include <dpl/event/inter_context_delegate.h>
-
-#include <dpl/ace-dao-ro/wrt_db_types.h>
-
-namespace Jobs {
-class Job;
-}
-
-namespace SecurityControllerEvents {
-DECLARE_GENERIC_EVENT_0(InitializeSyncEvent)
-DECLARE_GENERIC_EVENT_0(TerminateSyncEvent)
-
-DECLARE_GENERIC_EVENT_2(AuthorizeWidgetInstallEvent,
- Request *,
- AbstractPolicyEnforcementPoint::ResponseReceiver)
-
-DECLARE_GENERIC_EVENT_2(CheckFunctionCallSyncEvent,
- PolicyResult *,
- Request *)
-
-DECLARE_GENERIC_EVENT_3(SetWidgetPreferenceEvent,
- std::string, // resource,
- WidgetHandle, // subject
- AceDB::PreferenceTypes) // preference
-
-DECLARE_GENERIC_EVENT_2(SetResourcePreferenceEvent,
- std::string, // resource,
- AceDB::PreferenceTypes) // preference
-
-DECLARE_GENERIC_EVENT_1(GetWidgetsPreferencesSyncEvent,
- AceSettings::WidgetsPreferences *)
-
-DECLARE_GENERIC_EVENT_1(GetResourcesPreferencesSyncEvent,
- AceSettings::ResourcesPreferences *)
-
-DECLARE_GENERIC_EVENT_0(ResetWidgetsPreferencesEvent)
-DECLARE_GENERIC_EVENT_0(ResetResourcesPreferencesEvent)
-} // namespace SecurityControllerEvents
-
-typedef DPL::TypeListDecl<
- SecurityControllerEvents::InitializeSyncEvent,
- SecurityControllerEvents::TerminateSyncEvent,
- SecurityControllerEvents::AuthorizeWidgetInstallEvent,
- SecurityControllerEvents::CheckFunctionCallSyncEvent,
- SecurityControllerEvents::SetWidgetPreferenceEvent,
- SecurityControllerEvents::SetResourcePreferenceEvent,
- SecurityControllerEvents::GetWidgetsPreferencesSyncEvent,
- SecurityControllerEvents::GetResourcesPreferencesSyncEvent,
- SecurityControllerEvents::ResetWidgetsPreferencesEvent,
- SecurityControllerEvents::ResetResourcesPreferencesEvent>::Type
-SecurityControllerEventsTypeList;
-
-class SecurityController :
- public DPL::Event::Controller<SecurityControllerEventsTypeList>
-{
- protected:
- virtual void OnEventReceived(
- const SecurityControllerEvents::InitializeSyncEvent &event);
- virtual void OnEventReceived(
- const SecurityControllerEvents::TerminateSyncEvent &event);
- virtual void OnEventReceived(
- const SecurityControllerEvents::AuthorizeWidgetInstallEvent &event);
- virtual void OnEventReceived(
- const SecurityControllerEvents::CheckFunctionCallSyncEvent &e);
- virtual void OnEventReceived(
- const SecurityControllerEvents::SetWidgetPreferenceEvent &event);
- virtual void OnEventReceived(
- const SecurityControllerEvents::SetResourcePreferenceEvent &event);
- virtual void OnEventReceived(
- const SecurityControllerEvents::GetWidgetsPreferencesSyncEvent &
- event);
- virtual void OnEventReceived(
- const SecurityControllerEvents::GetResourcesPreferencesSyncEvent &
- evt);
- virtual void OnEventReceived(
- const SecurityControllerEvents::ResetWidgetsPreferencesEvent &evt);
- virtual void OnEventReceived(
- const SecurityControllerEvents::ResetResourcesPreferencesEvent &
- evt);
-
- private:
- class Impl;
- DPL::ScopedPtr<Impl> m_impl;
-
- SecurityController();
- //This desctructor must be in implementation file (cannot be autogenerated)
- ~SecurityController();
-
- friend class DPL::Singleton<SecurityController>;
-};
-
-typedef DPL::Singleton<SecurityController> SecurityControllerSingleton;
-
-#endif // SECURITY_CONTROLLER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This class simply redirects the access requests to access control engine.
- * The aim is to hide access control engine specific details from WRT modules.
- * It also implements WRT_INTERFACE.h interfaces, so that ACE could access
- * WRT specific and other information during the decision making.
- *
- * @file security_controller.h
- # @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @author Ming Jin(ming79.jin@samsung.com)
- * @author Piotr Kozbial (p.kozbial@samsung.com)
- * @version 1.0
- * @brief Header file for security logic
- */
-
-#include <dpl/ace/PromptDecision.h>
-#include <security_logic.h>
-#include <attribute_facade.h>
-#ifdef WRT_SMACK_ENABLED
-#include <privilege-control.h>
-#endif
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-
-void SecurityLogic::initialize() {
- m_policyEnforcementPoint.initialize(new WebRuntimeImpl(),
- new ResourceInformationImpl(),
- new OperationSystemImpl());
-}
-
-void SecurityLogic::terminate() {
- m_policyEnforcementPoint.terminate();
-}
-
-void SecurityLogic::authorizeWidgetInstall(
- Request *request,
- AbstractPolicyEnforcementPoint::ResponseReceiver receiver)
-{
- PolicyResult result = m_policyEnforcementPoint.check(*request);
-
- // this is bad idea, what about context in request ??
- // We could resolve problem with memory allocation by adding default
- // constructor to Request and pass object by value.
- delete request;
-
- receiver(result);
-}
-
-PolicyResult SecurityLogic::checkFunctionCall(Request* request)
-{
- PolicyResult aceResult = m_policyEnforcementPoint.check(*request);
- if (aceResult == PolicyEffect::PERMIT) {
-#ifdef WRT_SMACK_ENABLED
- try {
- WrtDB::WidgetDAOReadOnly dao(request->getWidgetHandle());
- DPL::OptionalString pkgName = dao.getPkgname();
- Assert(!pkgName.IsNull() && "widget doesn't have a pkg name");
- const char *devCap = "";
- int ret = grant_rules_forWAC(DPL::ToUTF8String(*pkgName).c_str(), devCap);
- Assert(ret==PC_OPERATION_SUCCESS && "smack rules couldn't be granted");
- } catch (WrtDB::WidgetDAOReadOnly::Exception) {
- Assert(false && "can't access widget data");
- }
-#endif
- return PolicyEffect::PERMIT;
- } else if (aceResult == PolicyEffect::PROMPT_ONESHOT ||
- aceResult == PolicyEffect::PROMPT_SESSION ||
- aceResult == PolicyEffect::PROMPT_BLANKET)
- {
- // TODO: check stored user answers!!!
- // if necessary, grant SMACK rules
- // return appropriately - the following is a dummy:
- return aceResult;
- } else {
- return PolicyEffect::DENY;
- }
-}
-
-//void SecurityLogic::setWidgetPreference(
-// std::string devCap,
-// WidgetHandle widgetHandle,
-// AceDB::PreferenceTypes preference)
-//{
-// m_aceSettingsLogic.setWidgetPreference(devCap,
-// widgetHandle,
-// preference);
-//}
-//
-//void SecurityLogic::setResourcePreference(
-// std::string devCap,
-// AceDB::PreferenceTypes preference)
-//{
-// m_aceSettingsLogic.setResourcePreference(devCap, preference);
-//}
-//
-//AceSettings::WidgetsPreferences SecurityLogic::getWidgetsPreferences() {
-// return m_aceSettingsLogic.getWidgetsPreferences();
-//}
-//
-//AceSettings::ResourcesPreferences SecurityLogic::getResourcesPreferences() {
-// return m_aceSettingsLogic.getResourcesPreferences();
-//}
-//
-//void SecurityLogic::resetWidgetsPreferences() {
-// m_aceSettingsLogic.resetWidgetsPreferences();
-//}
-//
-//void SecurityLogic::resetResourcesPreferences() {
-// m_aceSettingsLogic.resetResourcesPreferences();
-//}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This class simply redirects the access requests to access control engine.
- * The aim is to hide access control engine specific details from WRT modules.
- * It also implements WRT_INTERFACE.h interfaces, so that ACE could access
- * WRT specific and other information during the decision making.
- *
- * @file security_logic.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @author Ming Jin(ming79.jin@samsung.com)
- * @author Piotr Kozbial (p.kozbial@samsung.com)
- * @version 1.0
- * @brief Header file for security logic
- */
-#ifndef SECURITY_LOGIC_H
-#define SECURITY_LOGIC_H
-
-#include <dpl/ace/Request.h>
-#include <dpl/ace/PolicyResult.h>
-#include <dpl/ace/AbstractPolicyEnforcementPoint.h>
-#include <dpl/ace/Preference.h>
-#include <i_ace_settings_client.h>
-#include <dpl/ace/PolicyEnforcementPoint.h>
-
-//#include "ace_settings_logic.h"
-
-/* SecurityLogic
- * May only be created and used by SecurityController.
- * There may be only one instance.
- */
-class SecurityLogic {
- public:
- SecurityLogic() {}
- ~SecurityLogic() {}
- // initialize/terminate
- /** */
- void initialize();
- /** */
- void terminate();
- // access control checkpoints
- /** */
- void authorizeWidgetInstall(
- Request *,
- AbstractPolicyEnforcementPoint::ResponseReceiver);
- /** */
- PolicyResult checkFunctionCall(Request*);
- // access control user settings
- /** */
-// void setWidgetPreference(
-// std::string devCap,
-// WidgetHandle widgetHandle,
-// AceDB::PreferenceTypes preference);
-// /** */
-// void setResourcePreference(
-// std::string devCap,
-// AceDB::PreferenceTypes preference);
- /** */
-// AceSettings::WidgetsPreferences getWidgetsPreferences();
- /** */
-// AceSettings::ResourcesPreferences getResourcesPreferences();
- /** */
-// void resetWidgetsPreferences();
- /** */
-// void resetResourcesPreferences();
- private:
- PolicyEnforcementPoint m_policyEnforcementPoint;
-// AceSettingsLogic m_aceSettingsLogic;
-};
-
-#endif // SECURITY_CONTROLLER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_settings_server_factory.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is a header of server of ACE server factory
- */
-#ifndef WRT_SRC_ACCESS_CONTROL_SERVER_ACE_SETTINGS_SERVER_FACTORY_H_
-#define WRT_SRC_ACCESS_CONTROL_SERVER_ACE_SETTINGS_SERVER_FACTORY_H_
-
-#include <dpl/shared_ptr.h>
-#include <i_ace_settings_server.h>
-
-typedef DPL::SharedPtr<IAceSettingsServer> IAceSettingsServerPtr;
-
-class AceSettingsLogic;
-class PolicyEnforcementPoint;
-
-class AceSettingsServerFactory
-{
- public:
- static IAceSettingsServerPtr Create(AceSettingsLogic *aceSettingsLogic);
-
- private:
- AceSettingsServerFactory()
- {
- }
-};
-
-#endif // WRT_SRC_ACCESS_CONTROL_SERVER_ACE_SETTINGS_SERVER_FACTORY_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file i_ace_settings_client.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is a header file for interface of ACE settings client
- */
-#ifndef WRT_SRC_UI_SHARED_GADGET_IACESETTINGSCLIENT_H_
-#define WRT_SRC_UI_SHARED_GADGET_IACESETTINGSCLIENT_H_
-
-#include <dpl/fast_delegate.h>
-#include <dpl/ace-dao-ro/PreferenceTypes.h>
-#include <string>
-#include <vector>
-#include <i_ace_permissions.h>
-
-namespace AceSettings {
-
-class IClient
-{
- public:
- typedef DPL::FastDelegate<void (const WidgetsPreferences &preferences)>
- GetWidgetsPreferencesDelegate;
-
- typedef DPL::FastDelegate<void (const ResourcesPreferences &preferences)>
- GetResourcesPreferencesDelegate;
-
- virtual void setWidgetPreference(const std::string &resource,
- const std::string &widget,
- const AceDB::PreferenceTypes &preference) = 0;
-
- virtual void setResourcePreference(const std::string &resource,
- const AceDB::PreferenceTypes &preference) = 0;
-
- virtual void asyncGetWidgetsPreferences(
- GetWidgetsPreferencesDelegate delegate) = 0;
-
- virtual void asyncGetResourcesPreferences(
- GetResourcesPreferencesDelegate delegate) = 0;
-
- virtual void resetWidgetsPreferences() = 0;
- virtual void resetResourcesPreferences() = 0;
-
- virtual ~IClient()
- {
- }
-};
-} // namespace AceSettings
-
-#endif // WRT_SRC_UI_SHARED_GADGET_IACESETTINGSCLIENT_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file i_ace_settings_server.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is a header of server of ACE user preferences
- */
-#ifndef WRT_SRC_ACCESS_CONTROL_IPC_SETTINGS_I_ACE_SETTINGS_SERVER_H_
-#define WRT_SRC_ACCESS_CONTROL_IPC_SETTINGS_I_ACE_SETTINGS_SERVER_H_
-
-class IAceSettingsServer
-{
- public:
- virtual ~IAceSettingsServer()
- {
- }
-
- protected:
- IAceSettingsServer()
- {
- }
-};
-
-#endif // WRT_SRC_ACCESS_CONTROL_IPC_SETTINGS_I_ACE_SETTINGS_SERVER_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_settings_server_factory.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is a source of server of ACE server IPC factory
- */
-#include <ace_settings_server_factory.h>
-#include <ace_settings_server_ipc.h>
-
-IAceSettingsServerPtr AceSettingsServerFactory::Create(
- AceSettingsLogic *aceSettingsLogic)
-{
- return IAceSettingsServerPtr(new AceSettingsServerIPC(aceSettingsLogic));
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_settings_logic.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief This is an implementation of server of ACE user preferences
- */
-#include <ace_settings_server_ipc.h>
-#include <ace_settings_logic.h>
-#include <dpl/foreach.h>
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-#include <ace_settings_address.h>
-#include <dpl/ace/Preference.h>
-#include <oim_generator.h>
-#include <vector>
-
-AceSettingsServerIPC::AceSettingsServerIPC(AceSettingsLogic *aceSettingsLogic)
- :
- m_serverSockPath(AceSettings::DefaultAddress),
- m_connection(NULL),
- m_aceSettingsLogic(aceSettingsLogic)
-{
- Touch();
-
- DPL::Event::EventSupport<ConnectionEstablishedEvent>::AddListener(this);
-
- m_serverID = Open(m_serverSockPath);
-}
-
-AceSettingsServerIPC::~AceSettingsServerIPC()
-{
- closeConnection();
- deatachListeners();
-
- delete m_connection;
-
- DPL::Event::EventSupport<ConnectionEstablishedEvent>::RemoveListener(this);
-}
-
-void AceSettingsServerIPC::deatachListeners()
-{
- LogInfo("Deattaching listeners");
-
- if (m_connection) {
- m_connection->DPL::Event::EventSupport<AsyncCallEvent>
- ::RemoveListener(this);
- m_connection->DPL::Event::EventSupport<ConnectionClosedEvent>
- ::RemoveListener(this);
- m_connection->DPL::Event::EventSupport<ConnectionBrokenEvent>
- ::RemoveListener(this);
- }
-}
-
-void AceSettingsServerIPC::OnEventReceived(
- const ConnectionEstablishedEvent &event)
-{
- LogInfo("Initializing Connection");
-
- if (!m_connection) {
- m_connection = event.GetArg1();
- LogInfo("Estabilishing connection");
-
- m_connection->DPL::Event::EventSupport<AsyncCallEvent>
- ::AddListener(this);
- m_connection->DPL::Event::EventSupport<ConnectionClosedEvent>
- ::AddListener(this);
- m_connection->DPL::Event::EventSupport<ConnectionBrokenEvent>
- ::AddListener(this);
- } else {
- LogWarning("Ace settings can accept only one client");
- }
-}
-
-void AceSettingsServerIPC::closeConnection()
-{
- if (m_serverID) {
- LogInfo("Closing AceSettingsServerIPC");
-
- Close(m_serverID);
- m_serverID = NULL;
-
- if (unlink(m_serverSockPath.c_str()) == -1) {
- LogWarning("Cannot unlink socket file");
- }
- }
-}
-
-void AceSettingsServerIPC::OnEventReceived(const ConnectionClosedEvent & /*event*/)
-{
- deatachListeners();
-
- DPL::Event::ControllerEventHandler<CloseAceSettingsConnectionEvent>::
- PostEvent(CloseAceSettingsConnectionEvent());
-}
-
-void AceSettingsServerIPC::OnEventReceived(const ConnectionBrokenEvent & /*event*/)
-{
- deatachListeners();
-
- DPL::Event::ControllerEventHandler<CloseAceSettingsConnectionEvent>::
- PostEvent(CloseAceSettingsConnectionEvent());
-}
-
-void AceSettingsServerIPC::OnEventReceived(const AsyncCallEvent &event)
-{
- LogInfo("Received async call");
-
- Try
- {
- DPL::RPC::RPCFunction func = event.GetArg0();
-
- OIM::OIM_MESSAGES cmd;
- func.ConsumeArg(cmd);
-
- LogInfo("Received " << cmd << " from server");
-
- switch (cmd) {
- case OIM::MESSAGE_AskForWidgetResources_TYPE:
- sendWidgetsPreferences();
- break;
-
- case OIM::MESSAGE_AskForResources_TYPE:
- sendResourcesPreferences();
- break;
-
- case OIM::MESSAGE_SetWidgetResourcePreference_TYPE:
- receiveWidgetResourcePreference(func);
- break;
-
- case OIM::MESSAGE_SetResourcePreference_TYPE:
- receiveResourcePreference(func);
- break;
-
- case OIM::MESSAGE_AskForWidgetSecure_TYPE:
- sendwidgetsSecure();
- break;
-
- case OIM::MESSAGE_WidgetSecure_TYPE:
- receiveWidgetsSecure(func);
- break;
-
- case OIM::MESSAGE_ResetWidgetsPreferences_TYPE:
- receiveResetWidgetsPreferences(func);
- break;
-
- case OIM::MESSAGE_ResetResourcesPreferences_TYPE:
- receiveResetResourcesPreferences(func);
- break;
-
- default:
- LogWarning("Received Unknown command");
- closeConnection();
- break;
- }
- }
- Catch(DPL::RPC::RPCFunction::Exception::ParseFailed)
- {
- LogWarning("Failed to parse data from client");
- closeConnection();
- }
-}
-
-void AceSettingsServerIPC::OnEventReceived(
- const CloseAceSettingsConnectionEvent & /*event*/)
-{
- LogInfo("Received Close Connection event");
- delete m_connection;
- m_connection = NULL;
-}
-
-void AceSettingsServerIPC::sendWidgetsPreferences()
-{
- // Get widgets settings
- AceSettings::WidgetsPreferences widgetsPreferences =
- m_aceSettingsLogic->getWidgetsPreferences();
-
- // Convert widgets preferences to OIM structure
- OIM::WidgetsSettings::WidgetsSettings widgetsSettings;
-
- FOREACH(widgetsIterator, widgetsPreferences.subjectsResourcePreferences)
- {
- std::vector<OIM::ResourcePreference::ResourcePreference>
- resourcesCollection;
-
- FOREACH(resourcesIterator,
- widgetsIterator->resourcesPreference)
- {
- OIM::ResourcePreference::ResourcePreference resourcePreference;
-
- resourcePreference.resource = resourcesIterator->resource;
- resourcePreference.preference = resourcesIterator->preference;
-
- resourcesCollection.push_back(resourcePreference);
- }
-
- OIM::WidgetResourcesSetting::WidgetResourcesSetting
- widgetResourcesSetting;
-
- widgetResourcesSetting.subject = widgetsIterator->subject;
- widgetResourcesSetting.resourcesCollection = resourcesCollection;
-
- widgetsSettings.widgetsCollection.push_back(
- widgetResourcesSetting);
- }
-
- // Send OIM message
- DPL::RPC::RPCFunction func;
- widgetsSettings.Send(func);
-
- DPL::Event::ControllerEventHandler<AceSettingsSendDataEvent>
- ::PostEvent(AceSettingsSendDataEvent(func));
-}
-
-void AceSettingsServerIPC::sendResourcesPreferences()
-{
- // Get resource preferences
- AceSettings::ResourcesPreferences resourcesPreferences =
- m_aceSettingsLogic->getResourcesPreferences();
-
- // Convert to OIM message
- OIM::ResourcesSetting::ResourcesSetting resourceSettings;
-
- FOREACH(resourcesIterator, resourcesPreferences.resourcesPreference)
- {
- OIM::ResourcePreference::ResourcePreference resourcePreference;
-
- resourcePreference.resource = resourcesIterator->resource;
- resourcePreference.preference = resourcesIterator->preference;
-
- resourceSettings.resourcesCollection.push_back(resourcePreference);
- }
-
- // Post OIM message
- DPL::RPC::RPCFunction func;
- resourceSettings.Send(func);
- DPL::Event::ControllerEventHandler<AceSettingsSendDataEvent>
- ::PostEvent(AceSettingsSendDataEvent(func));
-}
-
-void AceSettingsServerIPC::sendwidgetsSecure()
-{
- OIM::WidgetSecure::WidgetSecure widgetSecure;
- widgetSecure.widgetSecure =
- m_aceSettingsLogic->getWidgetsSecure();
-
- DPL::RPC::RPCFunction func;
- widgetSecure.Send(func);
-
- DPL::Event::ControllerEventHandler<AceSettingsSendDataEvent>
- ::PostEvent(AceSettingsSendDataEvent(func));
-}
-
-void AceSettingsServerIPC::OnEventReceived(
- const AceSettingsSendDataEvent &event)
-{
- LogInfo("Sending data by AceSettings Controller");
-
- if (m_connection == NULL) {
- LogError("Connection is NULL!");
- return;
- }
-
- Try
- {
- m_connection->AsyncCall(event.GetArg0());
- }
- Catch(DPL::RPC::AbstractRPCConnection::Exception::AsyncCallFailed)
- {
- LogInfo("--------------AsyncCall Failed------------");
- closeConnection();
- }
-}
-
-void AceSettingsServerIPC::receiveWidgetResourcePreference(
- DPL::RPC::RPCFunction& func)
-{
- OIM::SetWidgetResourcePreference::SetWidgetResourcePreference
- setWidgetPreference;
-
- setWidgetPreference.Receive(func);
-
- LogDebug("Setting Widget Resource Preference");
-
-// m_aceSettingsLogic->setWidgetPreference(
-// setWidgetPreference.resourcePreference.resource,
-// setWidgetPreference.subject,
-// setWidgetPreference.resourcePreference.preference);
-}
-
-void AceSettingsServerIPC::receiveResourcePreference(DPL::RPC::RPCFunction& func)
-{
- OIM::SetResourcePreference::SetResourcePreference
- setResourcePreference;
-
- setResourcePreference.Receive(func);
-
- LogDebug("Setting Resource Preference");
-
- m_aceSettingsLogic->setResourcePreference(
- setResourcePreference.resourcePreference.resource,
- setResourcePreference.resourcePreference.preference);
-}
-
-void AceSettingsServerIPC::receiveWidgetsSecure(DPL::RPC::RPCFunction& func)
-{
- OIM::WidgetSecure::WidgetSecure setWidgetSecureOIM;
- setWidgetSecureOIM.Receive(func);
- LogDebug("Setting WidgetSecure");
-
- // Set widget secure
- m_aceSettingsLogic->setWidgetsSecure(setWidgetSecureOIM.widgetSecure);
-}
-
-void AceSettingsServerIPC::receiveResetWidgetsPreferences(DPL::RPC::RPCFunction& /*func*/)
-{
- m_aceSettingsLogic->resetWidgetsPreferences();
-}
-
-void AceSettingsServerIPC::receiveResetResourcesPreferences(DPL::RPC::RPCFunction& /*func*/)
-{
- m_aceSettingsLogic->resetResourcesPreferences();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_settings_logic.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is a header of server of ACE user preferences
- */
-#ifndef WRT_SRC_ACCESS_CONTROL_SERVER_IPC_ACE_SETTINGS_SERVER_IPC_H_
-#define WRT_SRC_ACCESS_CONTROL_SERVER_IPC_ACE_SETTINGS_SERVER_IPC_H_
-
-#include <string>
-#include <dpl/rpc/unix_socket_rpc_server.h>
-#include <dpl/rpc/unix_socket_rpc_connection.h>
-#include <dpl/event/controller.h>
-#include <dpl/type_list.h>
-//#include <dpl/ace/VerdictsManagerImpl.h>
-#include <i_ace_settings_client.h>
-#include <i_ace_settings_server.h>
-
-namespace AceSettingsLogicEvents {
-DECLARE_GENERIC_EVENT_0(CloseAceSettingsConnectionEvent)
-DECLARE_GENERIC_EVENT_1(AceSettingsSendDataEvent, DPL::RPC::RPCFunction)
-} // namespace AceSettingsLogicEvents
-
-class AceSettingsLogic;
-class PolicyEnforcementPoint;
-
-class AceSettingsServerIPC :
- public IAceSettingsServer,
- private DPL::RPC::UnixSocketRPCServer,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectorEvents::ConnectionEstablishedEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::AsyncCallEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::ConnectionClosedEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::ConnectionBrokenEvent>,
- private DPL::Event::Controller<
- DPL::TypeListDecl<
- AceSettingsLogicEvents::CloseAceSettingsConnectionEvent,
- AceSettingsLogicEvents::AceSettingsSendDataEvent>::Type>
-{
- public:
- virtual ~AceSettingsServerIPC();
-
- private:
- typedef DPL::RPC::AbstractRPCConnectorEvents::ConnectionEstablishedEvent
- ConnectionEstablishedEvent;
-
- typedef DPL::RPC::AbstractRPCConnectionEvents::AsyncCallEvent
- AsyncCallEvent;
-
- typedef DPL::RPC::AbstractRPCConnectionEvents::ConnectionClosedEvent
- ConnectionClosedEvent;
-
- typedef DPL::RPC::AbstractRPCConnectionEvents::ConnectionBrokenEvent
- ConnectionBrokenEvent;
-
- typedef AceSettingsLogicEvents::CloseAceSettingsConnectionEvent
- CloseAceSettingsConnectionEvent;
-
- typedef AceSettingsLogicEvents::AceSettingsSendDataEvent
- AceSettingsSendDataEvent;
-
- DPL::RPC::AbstractRPCConnectionID m_serverID;
- std::string m_serverSockPath;
- DPL::RPC::AbstractRPCConnection* m_connection;
-
- virtual void OnEventReceived(const ConnectionEstablishedEvent &event);
- virtual void OnEventReceived(const ConnectionClosedEvent &event);
- virtual void OnEventReceived(const ConnectionBrokenEvent &event);
- virtual void OnEventReceived(const AsyncCallEvent &event);
- virtual void OnEventReceived(const CloseAceSettingsConnectionEvent &event);
- virtual void OnEventReceived(const AceSettingsSendDataEvent &event);
-
- void closeConnection();
- void deatachListeners();
-
- virtual void sendWidgetsPreferences();
- virtual void sendResourcesPreferences();
- virtual void sendwidgetsSecure();
-
- AceSettingsServerIPC(AceSettingsLogic *aceSettingsLogic);
-
- /**
- * @fn virtual void ReceiveWidgetResourcePreference(DPL::RPC::RPCFunction& func)
- * @brief Gets WidgetResourcePreference from RPC function
- *
- * This method parses input RPCFunction and saves widget resource preference
- * to DB.
- * It changes RPCFunction function value.
- *
- *
- * @param [in] DPL::RPC::RPCFunction& func
- *
- * @return Nothing
- *
- */
- virtual void receiveWidgetResourcePreference(DPL::RPC::RPCFunction& func);
-
- /**
- * @fn virtual void ReceiveResourcePreference(DPL::RPC::RPCFunction& func)
- * @brief Gets ResourcePreference from RPC function
- *
- * This method parses input RPCFunction and saves resource preference to DB.
- * It changes RPCFunction function value.
- *
- *
- * @param [in] DPL::RPC::RPCFunction& func
- *
- * @return Nothing
- *
- */
- virtual void receiveResourcePreference(DPL::RPC::RPCFunction& func);
- virtual void receiveWidgetsSecure(DPL::RPC::RPCFunction& func);
-
- virtual void receiveResetWidgetsPreferences(DPL::RPC::RPCFunction& func);
- virtual void receiveResetResourcesPreferences(DPL::RPC::RPCFunction& func);
-
- AceSettingsLogic *m_aceSettingsLogic;
-
- // Factory can create instances
- friend class AceSettingsServerFactory;
-};
-
-#endif // WRT_SRC_ACCESS_CONTROL_SERVER_IPC_ACE_SETTINGS_SERVER_IPC_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file oim_generator.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief This is an implementation file for Object-IPC mapper
- */
-#include <oim_generator.h>
-
-namespace OIM {
-
-#define MESSAGE(name) \
- namespace name { \
- void name::Send(DPL::RPC::RPCFunction& func) { \
- func.AppendArg(MESSAGE_##name##_TYPE);
-
-#define FIELD(name, type) func.AppendArg(this->name);
-#define FIELDV(name, type) func.AppendArg(this->name.size()); \
- for(name##Iterator it = this->name.begin(); \
- it != this->name.end(); ++it) \
- { \
- func.AppendArg(*it); \
- }
-
-
-#define STRUCT(name, type) name.Send(func);
-
-#define STRUCTV(name, type) func.AppendArg(this->name.size()); \
- for(name##Iterator it = this->name.begin(); \
- it != this->name.end(); ++it) \
- { \
- it->Send(func); \
- }
-
-#define MESSAGE_END }\
- }
-
-#include "oim_messages"
-
-
-
-#undef MESSAGE
-#undef FIELD
-#undef FIELDV
-#undef STRUCT
-#undef STRUCTV
-#undef MESSAGE_END
-
-
-
-
-
-
-#define MESSAGE(name) \
- namespace name { \
- void name::Receive(DPL::RPC::RPCFunction& func) { \
- (void)func; \
- LogDebug("Receive!");
-#define FIELD(name, type) { \
- LogDebug("Consume Field " << STRINGIFY(type) << " "<< STRINGIFY(name) ); \
- type tmp; \
- func.ConsumeArg(tmp); \
- this->name = tmp; \
- LogDebug("Taking " << this->name); \
- LogDebug("Consumed Field " << STRINGIFY(name) ); \
- }
-#define FIELDV(name, type) { int size; \
- func.ConsumeArg(size); \
- for(int i = 0; \
- i < size; ++i) \
- { \
- type tmp; \
- func.ConsumeArg(tmp); \
- this->name.push_back(tmp); \
- } \
-}
-
-#define STRUCT(name, type) { \
- LogDebug("Expecting struct " << STRINGIFY(type)); \
- OIM_MESSAGES oim_type; \
- func.ConsumeArg(oim_type); \
- LogDebug("ClassName is " << oim_type); \
- type::type tmp; \
- tmp.Receive(func); \
- this->name = tmp; \
- }
-
-
-
-#define STRUCTV(name, type) { int size; \
- func.ConsumeArg(size); \
- LogDebug("Size:" << size); \
- for(int i = 0; i < size; ++i) \
- { \
- LogDebug("Expecting " << STRINGIFY(type)); \
- OIM_MESSAGES oim_type; \
- func.ConsumeArg(oim_type); \
- LogDebug("ClassName is " << oim_type); \
- Assert(oim_type == MESSAGE_##type##_TYPE && "Wrong ClassNameId sent"); \
- type::type tmp; \
- tmp.Receive(func); \
- this->name.push_back(tmp); \
- } \
-}
-#define MESSAGE_END }\
- }
-
-#include "oim_messages"
-
-
-#undef MESSAGE
-#undef FIELD
-#undef FIELDV
-#undef STRUCT
-#undef STRUCTV
-#undef MESSAGE_END
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file oim_generator.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief This is a header file for Object-IPC mapper
- */
-
-
-#ifndef OIM_GENERATOR_H_
-#define OIM_GENERATOR_H_
-
-#include <vector>
-#include <dpl/rpc/abstract_rpc_connection.h>
-
-#include <dpl/ace/Preference.h>
-#include <string>
-#include <dpl/string.h>
-
-#define STRINGIFY(s) _str(s)
-#define _str(s) #s
-
-namespace OIM
-{
-
-enum OIM_MESSAGES {
-
-#define MESSAGE(name) MESSAGE_##name##_TYPE,
-
-#define FIELD(name, type)
-#define FIELDV(name, type)
-#define STRUCT(name, type)
-#define STRUCTV(name, type)
-
-#define MESSAGE_END
-
-#include "oim_messages"
-
-#undef MESSAGE
-#undef FIELD
-#undef FIELDV
-#undef STRUCT
-#undef STRUCTV
-#undef MESSAGE_END
-};
-
-#define MESSAGE(name) \
- namespace name { \
- class name { \
- public: \
- void Send(DPL::RPC::RPCFunction& func); \
- void Receive(DPL::RPC::RPCFunction& func);
-#define FIELD(name, type) type name;
-#define FIELDV(name, type) std::vector<type> name; \
- typedef std::vector<type>::iterator name##Iterator;
-
-#define STRUCT(name, type) type::type name;
-#define STRUCTV(name, type) std::vector<type::type> name; \
- typedef std::vector<type::type>::iterator name##Iterator;
-
-#define MESSAGE_END }; \
- }
-
-
-#include "oim_messages"
-
-
-#undef MESSAGE
-#undef FIELD
-#undef FIELDV
-#undef STRUCT
-#undef STRUCTV
-#undef MESSAGE_END
-
-
-} //end of namespace OIM
-
-
-
-#endif /* OIM_GENERATOR_H_ */
+++ /dev/null
-MESSAGE(ResourcePreference)
- FIELD (resource, std::string)
- FIELD (preference, Preference)
-MESSAGE_END
-
-MESSAGE(WidgetResourcesSetting)
- FIELD (subject, std::string )
- STRUCTV (resourcesCollection, ResourcePreference)
-MESSAGE_END
-
-MESSAGE(WidgetsSettings)
- STRUCTV (widgetsCollection, WidgetResourcesSetting)
-MESSAGE_END
-
-MESSAGE(ResourcesSetting)
- STRUCTV (resourcesCollection, ResourcePreference)
-MESSAGE_END
-
-MESSAGE(SetResourcePreference)
- STRUCT (resourcePreference, ResourcePreference)
-MESSAGE_END
-
-MESSAGE(SetWidgetResourcePreference)
- FIELD (subject, std::string )
- STRUCT (resourcePreference, ResourcePreference)
-MESSAGE_END
-
-MESSAGE(WidgetSecure)
- FIELD (widgetSecure, bool)
-MESSAGE_END
-
-MESSAGE(AskForWidgetResources)
-MESSAGE_END
-
-MESSAGE(AskForResources)
-MESSAGE_END
-
-MESSAGE(AskForWidgetSecure)
-MESSAGE_END
-
-/**
- * Commands for resetting to defaults
- */
-MESSAGE(ResetWidgetsPreferences)
-MESSAGE_END
-
-MESSAGE(ResetResourcesPreferences)
-MESSAGE_END
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_settings_server_factory.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is a source of server of ACE server NULL factory
- */
-#include <ace_settings_server_factory.h>
-
-IAceSettingsServerPtr AceSettingsServerFactory::Create(
- AceSettingsLogic* /*aceSettingsLogic*/)
-{
- return IAceSettingsServerPtr();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file simple_roaming_agent.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @author Lukasz Marek (l.marek@samsung.com)
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @version 1.0
- * @brief roaming agent
- */
-
-#include "simple_roaming_agent.h"
-#include <vconf.h>
-#include <dpl/fast_delegate.h>
-#include <dpl/log/log.h>
-#include <dpl/singleton_impl.h>
-IMPLEMENT_SINGLETON(SimpleRoamingAgent)
-
-SimpleRoamingAgent::SimpleRoamingAgent()
-{
- if (vconf_notify_key_changed(
- VCONFKEY_TELEPHONY_SVC_ROAM,
- vConfChagedCallback, this) < 0)
- {
- LogError("Cannot add vconf callback [" <<
- VCONFKEY_TELEPHONY_SVC_ROAM << "]");
- Assert(false && "Cannot add vconf callback");
- }
-
- int result = 0;
- if (vconf_get_int(VCONFKEY_TELEPHONY_SVC_ROAM, &result) != 0) {
- LogError("Cannot get current roaming status");
- Assert(false && "Cannot get current roaming status");
- } else {
- bool type = (result == VCONFKEY_TELEPHONY_SVC_ROAM_ON);
- m_networkType = type ? ROAMING : HOME;
- LogInfo("Network type is " << (type ? "ROAMING" : "HOME"));
- }
-
-}
-
-SimpleRoamingAgent::~SimpleRoamingAgent()
-{
- if (vconf_ignore_key_changed(
- VCONFKEY_TELEPHONY_SVC_ROAM,
- vConfChagedCallback) < 0)
- {
- LogError("Cannot rm vconf callback [" <<
- VCONFKEY_TELEPHONY_SVC_ROAM << "]");
- Assert(false && "Cannot remove vconf callback");
- }
-
-}
-
-void SimpleRoamingAgent::vConfChagedCallback(keynode_t *keyNode, void *data)
-{
- LogInfo("SimpleRoamingAgent::vConfChagedCallback ");
- char *key = vconf_keynode_get_name(keyNode);
-
- if (NULL == key) {
- LogWarning("vconf key is null.");
- return;
- }
- SimpleRoamingAgent *agent = static_cast<SimpleRoamingAgent *>(data);
- if (NULL == agent) {
- LogError("Bad user arg from vconf lib");
- Assert(false && "Bad user arg from vconf lib");
- return;
- }
- int result = 0;
- if (vconf_get_int(VCONFKEY_TELEPHONY_SVC_ROAM, &result) != 0) {
- LogError("Cannot get current roaming status");
- Assert(false && "Cannot get current roaming status");
- } else {
- bool type = (result == VCONFKEY_TELEPHONY_SVC_ROAM_ON);
- agent->m_networkType = type ? ROAMING : HOME;
- LogInfo("Network type is " << (type ? "ROAMING" : "HOME"));
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file simple_roaming_agent.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @version 1.0
- * @brief simple roaming agent
- */
-
-#ifndef WRT_SRC_ACCESS_CONTROL_COMMON_SIMPLE_ROAMING_AGENT_H_
-#define WRT_SRC_ACCESS_CONTROL_COMMON_SIMPLE_ROAMING_AGENT_H_
-
-#include <string>
-#include <dpl/singleton.h>
-#include <dpl/noncopyable.h>
-#include <vconf.h>
-
-class SimpleRoamingAgent : DPL::Noncopyable
-{
- public:
- bool IsRoamingOn() const
- {
- return ROAMING == m_networkType;
- }
-
- private:
- enum NetworkType {ROAMING, HOME};
-
- NetworkType m_networkType;
-
- SimpleRoamingAgent();
- virtual ~SimpleRoamingAgent();
-
- static void vConfChagedCallback(keynode_t *keyNode, void *userParam);
-
- friend class DPL::Singleton<SimpleRoamingAgent>;
-};
-
-typedef DPL::Singleton<SimpleRoamingAgent> SimpleRoamingAgentSingleton;
-
-#endif//WRT_SRC_ACCESS_CONTROL_COMMON_SIMPLE_ROAMING_AGENT_H_
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Pawel Sikorski (p.sikorski@samsung.com)
-# @version 1.0
-# @brief
-#
\ No newline at end of file
+++ /dev/null
-architecture specific files
+++ /dev/null
-Common definitions, global settings, small utilities
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_settings_address.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This is a header for default ACE settings address
- */
-#ifndef WRT_SRC_COMMON_ACE_SETTINGS_ADDRESS_H_
-#define WRT_SRC_COMMON_ACE_SETTINGS_ADDRESS_H_
-
-namespace AceSettings {
-char const * const DefaultAddress = "/tmp/wrt_ace_settings";
-} // namespace AceSettings
-
-#endif // WRT_SRC_COMMON_ACE_SETTINGS_ADDRESS_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file force_stop.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief This file contains implementation of killing widget.
- */
-#include <force_stop.h>
-
-
-#include <dirent.h>
-#include <sys/types.h> // for opendir(), readdir(), closedir()
-
-#include <fstream>
-#include <string>
-#include <sstream>
-#include <vector>
-#include <csignal>
-
-#include <dpl/foreach.h>
-#include <dpl/log/log.h>
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-
-namespace Utils {
-namespace {
-typedef std::vector<pid_t> PidCollection;
-PidCollection findPIDFromWidgetHandle(int widgetHandle)
-{
- const static char procDir[] = "/proc/";
- const static char cmdline[] = "/cmdline";
-
- PidCollection pidCollection;
-
- DIR* dir = opendir(procDir);
- if (NULL == dir) {
- LogWarning("Cannot open directory " << procDir);
- return pidCollection;
- }
-
- struct dirent* dirEntry;
-
- // name of widget being run is:
-
-
- WrtDB::WidgetDAOReadOnly dao(widgetHandle);
- DPL::OptionalString pkgname = dao.getPkgname();
- std::stringstream out;
- out << pkgname << "/" << WrtDB::GlobalConfig::GetUserWidgetExecPath()
- << "/" << widgetHandle;
-
- std::string searchedName(out.str());
- while ((dirEntry = readdir(dir))) {
- if (DT_DIR == dirEntry->d_type) {
- std::istringstream iss(dirEntry->d_name);
- pid_t pid;
- iss >> pid;
- if (iss.fail()) {
- continue;
- }
-
- //build full path
- std::string fullPath(procDir);
- fullPath += dirEntry->d_name;
- fullPath += cmdline;
-
- std::ifstream cmdlineFile(fullPath);
-
- if (!cmdlineFile.is_open()) {
- LogWarning("Couldn't open file");
- continue;
- }
-
- std::string invocationText;
- if (!getline(cmdlineFile, invocationText)) {
- continue;
- }
-
- bool isPrefix = searchedName.length() <= invocationText.length() &&
- std::equal(searchedName.begin(),
- searchedName.end(),
- invocationText.begin());
- if (isPrefix) {
- LogInfo("Found process to kill: " << pid);
- pidCollection.push_back(pid);
- }
- }
- }
- closedir(dir);
- return pidCollection;
-}
-
-} // end of anonymous namespace
-
-void killWidget(int widgetHandle)
-{
- PidCollection pidCollection = findPIDFromWidgetHandle(widgetHandle);
- FOREACH(pid, pidCollection) {
- kill(*pid, SIGKILL);
- }
-}
-
-} // end of namespace Utils
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file force_stop.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief This file contains declaration of killing widget.
- */
-
-#ifndef SRC_COMMON_FORCE_STOP_H_
-#define SRC_COMMON_FORCE_STOP_H_
-
-namespace Utils {
-void killWidget(int widgetHandle);
-} // end of namespace Utils
-
-#endif /* SRC_COMMON_FORCE_FORCE_STOP_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file new_strdup.h
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @version 1.0
- * @brief This file contains the declaration of the stdup with new operator
- */
-
-#ifndef SRC_COMMON_NEW_STRDUP_H_
-#define SRC_COMMON_NEW_STRDUP_H_
-
-inline char* new_strdup(const char *str)
-{
- size_t size = strlen(str);
- char* ret = new char[size + 1];
- strcpy(ret, str);
- return ret;
-}
-
-#endif //SRC_COMMON_NEW_STRDUP_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * wrt_db_types.h
- *
- * Created on: Nov 21, 2011
- * Author: Krzysztof Jackiewicz(k.jackiewicz@samsung.com)
- */
-
-#ifndef WRT_DB_TYPES_H_
-#define WRT_DB_TYPES_H_
-
-#include <dpl/wrt-dao-ro/common_dao_types.h>
-
-typedef WrtDB::DbWidgetHandle WidgetHandle;
-typedef WrtDB::DbWidgetHandleList WidgetHandleList;
-
-typedef WrtDB::DbWidgetFeature WidgetFeature;
-typedef WrtDB::DbWidgetFeatureSet WidgetFeatureSet;
-
-typedef WrtDB::DbWidgetSize WidgetSize;
-
-typedef WrtDB::DbPluginHandle PluginHandle;
-
-#endif /* WRT_DB_TYPES_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This file contains the declaration of the error codes of Widget.
- *
- * @file wrt_error.h
- * @author MaQuan (jason.ma@samsung.com)
- * @version 0.7
- * @brief This file contains the declaration of the error codes of Widget.
- */
-
-#ifndef _WRT_ERROR_H_
-#define _WRT_ERROR_H_
-
-#ifndef WRT_ERROR_MASKL8
-#define WRT_ERROR_MASKL8 0xFF
-#endif
-
-#ifndef WRT_SET_IDENT
-#define WRT_SET_IDENT(X) (X & WRT_ERROR_MASKL8)
-#endif
-
-#ifndef WRT_ERROR_SET
-#define WRT_ERROR_SET(X) ((X & WRT_ERROR_MASKL8) << 8)
-#endif
-
-#define WRT_MID_ERRCODE 0x10000 + WRT_SET_IDENT(5)
-
-/*typedef */ enum
-{
- WRT_GENERAL_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(0),
- WRT_CONFIG_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(1),
- WRT_DOMAIN_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(2),
- WRT_JS_EXT_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(3),
- WRT_WM_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(4),
- WRT_PLUGIN_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(5),
- //_ACE support
- WRT_SAI_ERRCODE = WRT_MID_ERRCODE + WRT_SET_IDENT(6)
-};
-
-/**
- * WRT error code description
- *
- * @ WRT_SUCCESS
- * There is no error with WRT operations.
- *
- * @ WRT_ERR_UNKNOW
- * An unknow error happened to WRT.
- *
- * @ WRT_ERR_INVALID_ARG
- * Invalid arguments are passed into WRT functions.
- *
- * @ WRT_ERR_OUT_MEMORY
- * No memory space available for WRT.
- *
- * @ WRT_ERR_NO_DISK_SPACE
- * There is no disk space for widget applications.
- *
- *
- *
- *
- */
-enum WrtError
-{
- /* General errors */
- WRT_SUCCESS = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x01),
- WRT_ERR_UNKNOWN = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x02),
- WRT_ERR_INVALID_ARG = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x03),
- WRT_ERR_OUT_OF_MEMORY = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x04),
- WRT_ERR_NO_DISK_SPACE = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x05),
-
- /* Configuration */
- WRT_CONF_ERR_GCONF_FAILURE = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x01),
- WRT_CONF_ERR_OBJ_MISSING = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x02),
- WRT_CONF_ERR_OBJ_EXIST = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x03),
- WRT_CONF_ERR_START_FILE_MISSING = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x04),
- WRT_CONF_ERR_EMDB_FAILURE = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x05),
- WRT_CONF_ERR_EMDB_NO_RECORD = WRT_CONFIG_ERRCODE + WRT_ERROR_SET(0x06),
-
- /* Domain */
- WRT_DOMAIN_ERR_CREATE_JS_RT = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x01),
- WRT_DOMAIN_ERR_MSG_QUEUE = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x02),
-
- /* Widget manager*/
- WRT_WM_ERR_NOT_INSTALLED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x01),
- WRT_WM_ERR_HIGH_VER_INSTALLED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x02),
- WRT_WM_ERR_LOW_VER_INSTALLED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x03),
- WRT_WM_ERR_INVALID_ARCHIVE = WRT_WM_ERRCODE + WRT_ERROR_SET(0x04),
- WRT_WM_ERR_INVALID_CERTIFICATION = WRT_WM_ERRCODE + WRT_ERROR_SET(0x05),
- WRT_WM_ERR_NULL_CERTIFICATION = WRT_WM_ERRCODE + WRT_ERROR_SET(0x06),
- WRT_WM_ERR_INSTALLATION_CANCEL = WRT_WM_ERRCODE + WRT_ERROR_SET(0x07),
- WRT_WM_ERR_ALREADY_INSTALLED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x08),
- WRT_WM_ERR_INSTALL_FAILED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x09),
- WRT_WM_ERR_DELETE_BY_SERVER = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0a),
- WRT_WM_ERR_DEINSTALLATION_CANCEL = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0b),
- WRT_WM_ERR_INCORRECT_UPDATE_INFO = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0c),
- WRT_WM_ERR_UNREG_FAILED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0d),
- WRT_WM_ERR_REMOVE_FILES_FAILED = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0e),
- WRT_WM_ERR_ALREADY_LATEST = WRT_WM_ERRCODE + WRT_ERROR_SET(0x0f),
- WRT_WM_ERR_UPDATE_CANCEL = WRT_WM_ERRCODE + WRT_ERROR_SET(0x10),
- WRT_WM_ERR_IS_FACTORY_WIDGET = WRT_WM_ERRCODE + WRT_ERROR_SET(0x11),
- WRT_WM_ERR_INVALID_APP_ID = WRT_WM_ERRCODE + WRT_ERROR_SET(0x12),
-
- /* Access Control Manager */
- WRT_SAI_ERR_INIT_ACE_FAILED = WRT_SAI_ERRCODE + WRT_ERROR_SET(0x01)
-};
-
-enum IGError
-{
- /* General errors */
- ERR_AUI_SUCCESS = WRT_SUCCESS,
- ERR_WIDGET_INSTALL_SUCCESSFULLY = WRT_SUCCESS,
- ERR_WIDGET_UNKNOWN = WRT_ERR_UNKNOWN,
- ERR_AUI_ARG_INVALID = WRT_ERR_INVALID_ARG,
- ERR_AUI_OUT_OF_MEMORY = WRT_ERR_OUT_OF_MEMORY,
- ERR_WIDGET_NO_ENOUGH_SPACE = WRT_ERR_NO_DISK_SPACE,
- ERR_AUI_ARG_NULL = WRT_GENERAL_ERRCODE + WRT_ERROR_SET(0x06),
-
- /* Configuration */
- ERR_AUI_CONF_GCONF_FAILURE = WRT_CONF_ERR_GCONF_FAILURE,
- ERR_AUI_OBJ_NOT_FOUND = WRT_CONF_ERR_OBJ_MISSING,
- ERR_AUI_OBJ_ALREADY_EXIST = WRT_CONF_ERR_OBJ_EXIST,
- ERR_AUI_FILE_NOT_FOUND = WRT_CONF_ERR_START_FILE_MISSING,
- ERR_AUI_CONF_EMDB_FAILURE = WRT_CONF_ERR_EMDB_FAILURE,
- ERR_AUI_CONF_EMDB_NO_RECORD = WRT_CONF_ERR_EMDB_NO_RECORD,
-
- /* Domain */
- ERR_DM_JSRT_CRET = WRT_DOMAIN_ERR_CREATE_JS_RT,
- ERR_DM_MSG_QUEUE = WRT_DOMAIN_ERR_MSG_QUEUE,
- ERR_DM_EVAL_FAIL = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x03),
- ERR_DM_INVALID_DOMAIN = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x04),
- ERR_DM_INVALID_WIDGET = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x05),
- ERR_DM_AC_GENERAL_FAIL = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x06),
- ERR_DM_OUT_OF_RESOURCE = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x07),
- ERR_DM_AC_SYSTEM_POLICY_CONFLICT = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x08),
- ERR_DM_AC_WIDGET_POLICY_CONFLICT = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x09),
- ERR_DM_THREAD_CRET = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x0a),
- ERR_AUI_INVALID_TYPE = WRT_DOMAIN_ERRCODE + WRT_ERROR_SET(0x0b),
-
- /* Widget manager*/
- ERR_WIDGET_NOT_INSTALLED = WRT_WM_ERR_NOT_INSTALLED,
- ERR_WIDGET_HIGH_VER_INSTALLED = WRT_WM_ERR_HIGH_VER_INSTALLED,
- ERR_WIDGET_LOW_VER_INSTALLED = WRT_WM_ERR_LOW_VER_INSTALLED,
- ERR_WIDGET_INVALID_ARCHIVE = WRT_WM_ERR_INVALID_ARCHIVE,
- ERR_WIDGET_CERTIFICATION_FAILED = WRT_WM_ERR_INVALID_CERTIFICATION,
- ERR_WIDGET_NULL_CERTIFICATION = WRT_WM_ERR_NULL_CERTIFICATION,
- ERR_WIDGET_INSTALLATION_CANCEL = WRT_WM_ERR_INSTALLATION_CANCEL,
- ERR_WIDGET_ALREADY_INSTALLED = WRT_WM_ERR_ALREADY_INSTALLED,
- ERR_WIDGET_INSTALL_FAILED = WRT_WM_ERR_INSTALL_FAILED,
- ERR_WIDGET_DELETE_BY_SERVER = WRT_WM_ERR_DELETE_BY_SERVER,
- ERR_WIDGET_DEINSTALLATION_CANCEL = WRT_WM_ERR_DEINSTALLATION_CANCEL,
- ERR_WIDGET_UPDATE_INFO_INCORRECT = WRT_WM_ERR_INCORRECT_UPDATE_INFO,
- ERR_WIDGET_UNREG_FAILED = WRT_WM_ERR_UNREG_FAILED,
- ERR_WIDGET_REMOVE_FILES_FAILED = WRT_WM_ERR_REMOVE_FILES_FAILED,
- ERR_WIDGET_IS_LATEST = WRT_WM_ERR_ALREADY_LATEST,
- ERR_WIDGET_UPDATE_CANCEL = WRT_WM_ERR_UPDATE_CANCEL,
- ERR_WIDGET_IS_FACTORY_WIDGET = WRT_WM_ERR_IS_FACTORY_WIDGET,
- ERR_WIDGET_INVALID_APP_ID = WRT_WM_ERR_INVALID_APP_ID,
- ERR_WIDGET_NONE_FILES_EXIST = WRT_WM_ERRCODE + WRT_ERROR_SET(0x13),
- ERR_WIDGET_INSTALL_SEARCH_EXCEPTION = WRT_WM_ERRCODE + WRT_ERROR_SET(0x14),
- ERR_WIDGET_NOT_INIT = WRT_WM_ERRCODE + WRT_ERROR_SET(0x15),
- ERR_WIDGET_NO_ARCHIVE = WRT_WM_ERRCODE + WRT_ERROR_SET(0x16),
- ERR_WIDGET_SET_DEFAULT = WRT_WM_ERRCODE + WRT_ERROR_SET(0x17),
- ERR_WIDGET_SET_VALUE = WRT_WM_ERRCODE + WRT_ERROR_SET(0x18)
-};
-
-//Just for debug, d.wei@samsung.com
-//#define WRT_WIDGETMGR_TEST
-
-#define W3C_WORKING_DRAFT_9_NOVEMBER_2006_EXPENDED_SUPPORT
-
-#define WRT_WIDGET_API_TO_BE_REMOVED
-#define WRT_WIDGET_JIL_1_1_API_SUPPORT
-
-//#define WRT_EXTENDED_WIDGET_API
-
-#endif /* _WRT_ERROR_H_ */
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file application_launcher.cpp
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @version 1.0
- * @brief Implementation file for application launcher
- */
-
-#include "application_launcher.h"
-#include <aul.h>
-#include <youtubehd.h>
-#include <dpl/singleton_impl.h>
-#include <appsvc.h>
-#include <bundle.h>
-
-IMPLEMENT_SINGLETON(ApplicationLauncher)
-
-using namespace WrtDB;
-
-namespace {
-const char * const BUNDLE_URL = "url";
-const char * const BUNDLE_PATH = "path";
-const char * const BUNDLE_COOKIE = "cookie";
-
-const char * const SCHEME_TYPE_YOUTUBE = "vnd.youtube";
-const char * const SCHEME_TYPE_RTSP = "rtsp";
-const char * const SCHEME_TYPE_HTML5_VIDEO = "html5video";
-}
-
-ApplicationLauncher::ApplicationLauncher()
-{
-}
-
-ApplicationLauncher::~ApplicationLauncher()
-{
-}
-
-void ApplicationLauncher::OnEventReceived(
- const ApplicationLauncherEvents::LaunchApplicationByURI &event)
-{
- LogDebug("Lanuching default application for URI: " << event.GetArg0());
- std::string uri = DPL::ToUTF8String(event.GetArg0());
- int code = aul_open_content(uri.c_str());
- switch (code) {
- case AUL_R_OK:
- LogDebug("\tLaunched with success");
- break;
- case AUL_R_ERROR:
- LogDebug("\tAUL_R_ERROR - general error or no found mimetype");
- break;
- case AUL_R_EINVAL:
- LogDebug("\tAUL_R_EINVAL - invalid argument(content) passed");
- break;
- case AUL_R_ECOMM:
- LogDebug("\tAUL_R_ECOM - internal AUL IPC error");
- break;
- default:
- LogDebug("\tunknown error code: " << code);
- break;
- }
-}
-
-void ApplicationLauncher::OnEventReceived(
- const ApplicationLauncherEvents::LaunchApplicationByAppService &event)
-{
- int result;
- bundle *args = event.GetArg0();
- appsvc_res_fn responseCallback = event.GetArg1();
- void *userData = event.GetArg2();
- result = appsvc_run_service(args, 0, responseCallback, userData);
-
- if (result != APPSVC_RET_OK)
- LogError("Failed to run AppService");
-}
-
-void ApplicationLauncher::OnEventReceived(
- const ApplicationLauncherEvents::LaunchApplicationByPkgname &event)
-{
- using namespace ApplicationLauncherPkgname;
- LogDebug("LaunchApplicationByPkgname");
- std::string pkgName(event.GetArg0());
-
- if (PKG_NAME_DOWNLOAD_PROVIDER == pkgName) {
- std::string url(event.GetArg1());
- // This value needs for checking video, music contents later.
- //std::string mime_type(event.GetArg2());
- std::string cookie(event.GetArg3());
-
- if ("null" == url) {
- LogError("url is empty");
- return;
- }
-
- bundle* bundle = bundle_create();
-
- if (NULL == bundle) {
- LogError("Fail to create bundle");
- return;
- }
- if (bundle_add(bundle, BUNDLE_URL, url.c_str())) {
- LogError("Fail to add bundle for path");
- bundle_free(bundle);
- return;
- }
- if (cookie != "null") {
- if (bundle_add(bundle, BUNDLE_COOKIE, cookie.c_str())) {
- LogError("Fail to add bundle for cookie");
- bundle_free(bundle);
- return;
- }
- }
- if (aul_launch_app(PKG_NAME_DOWNLOAD_PROVIDER.c_str(), bundle) < 0) {
- LogError("aul_launch_app is failed");
- }
- bundle_free(bundle);
- } else if (PKG_NAME_VIDEO_PLAYER == pkgName) {
- if (aul_app_is_running(PKG_NAME_VT_MAIN.c_str()))
- {
- LogError("video-call is running......");
- return;
- }
-
- std::string scheme(event.GetArg1());
- std::string uri(event.GetArg2());
- std::string cookie(event.GetArg3());
- std::string videoPath;
- int aulRVal = AUL_R_ERROR;
-
- if ("null" == scheme) {
- LogError("scheme is empty");
- return;
- }
- if ("null" == uri) {
- LogError("uri is empty");
- return;
- }
-
- LogDebug("scheme: " << scheme);
- if (SCHEME_TYPE_YOUTUBE == scheme) {
- YouTubeHD *youtube = new YouTubeHD(m_widgetHandle);
- videoPath = youtube->getYouTubeHD(uri.c_str());
- delete youtube;
- } else if (SCHEME_TYPE_RTSP == scheme ||
- (SCHEME_TYPE_HTML5_VIDEO == scheme))
- {
- videoPath = uri;
- } else {
- LogError("scheme is invalid!!");
- return;
- }
-
- bundle *bundle = bundle_create();
- if (bundle == NULL) {
- LogError("Fail to create bundle");
- bundle_free(bundle);
- return;
- }
-
- if (videoPath.empty()) {
- LogError("getYouTubeHD is FAILED!!");
- bundle_free(bundle);
- return;
- }
- LogDebug("videoPath: " << videoPath);
- if (bundle_add(bundle, BUNDLE_PATH, videoPath.c_str()) < 0) {
- LogError("bundle_add is FAIL!!");
- bundle_free(bundle);
- return;
- }
-
- if (SCHEME_TYPE_HTML5_VIDEO == scheme) {
- if ("null" != cookie) {
- LogDebug("cookie: " << cookie);
- if (bundle_add(bundle, BUNDLE_COOKIE, cookie.c_str()) < 0) {
- LogError("cookie is empty");
- bundle_free(bundle);
- return;
- }
- }
- }
-
- aulRVal = aul_launch_app(PKG_NAME_VIDEO_PLAYER.c_str(), bundle);
- if (AUL_R_OK > aulRVal) {
- LogError("aul_launch_app is failed! aulRVal: " << aulRVal);
- }
- if (bundle_free(bundle)) {
- LogDebug("bundle_free is FAILED!!");
- }
-
- }
-}
-
-void ApplicationLauncher::setWidgetHandle(const WidgetHandle widgetHandle)
-{
- LogDebug("widgetHandle: " << widgetHandle);
- m_widgetHandle = widgetHandle;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file application_launcher.h
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @version 1.0
- * @brief Header file for application launcher
- */
-
-#ifndef APPLICATION_LAUNCHER_H
-#define APPLICATION_LAUNCHER_H
-
-#include <dpl/singleton.h>
-#include <dpl/generic_event.h>
-#include <dpl/type_list.h>
-#include <dpl/event/controller.h>
-#include <dpl/string.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <widget_data_types.h>
-#include <appsvc.h>
-#include <bundle.h>
-
-namespace ApplicationLauncherEvents {
-DECLARE_GENERIC_EVENT_1(LaunchApplicationByURI, DPL::String)
-DECLARE_GENERIC_EVENT_3(LaunchApplicationByAppService,
- bundle*,
- appsvc_res_fn,
- void*)
-DECLARE_GENERIC_EVENT_4(LaunchApplicationByPkgname,
- std::string,
- std::string,
- std::string,
- std::string)
-
-
-} //namespace ApplicationLauncherEvents
-
-namespace ApplicationLauncherPkgname {
- const std::string PKG_NAME_DOWNLOAD_PROVIDER =
- std::string(
- WrtDB::GlobalConfig::GetPkgnamePrefix()) + "download-provider";
- const std::string PKG_NAME_VIDEO_PLAYER =
- std::string(WrtDB::GlobalConfig::GetPkgnamePrefix()) + "video-player";
- const std::string PKG_NAME_VT_MAIN =
- std::string(WrtDB::GlobalConfig::GetPkgnamePrefix()) + "vtmain";
-} // namespace ApplicationLauncherPkgname
-
-class ApplicationLauncher :
- public DPL::Event::Controller<DPL::TypeListDecl<
- ApplicationLauncherEvents::LaunchApplicationByURI,
- ApplicationLauncherEvents::LaunchApplicationByPkgname,
- ApplicationLauncherEvents::LaunchApplicationByAppService
- >::Type>
-{
- public:
- ApplicationLauncher();
- virtual ~ApplicationLauncher();
- void setWidgetHandle(const WidgetHandle widgetHandle);
-
- protected:
- virtual void OnEventReceived(
- const ApplicationLauncherEvents::LaunchApplicationByURI &event);
- virtual void OnEventReceived(
- const ApplicationLauncherEvents::
- LaunchApplicationByPkgname &event);
- virtual void OnEventReceived(
- const ApplicationLauncherEvents::
- LaunchApplicationByAppService &event);
-
- private:
- WidgetHandle m_widgetHandle;
-};
-
-typedef DPL::Singleton<ApplicationLauncher> ApplicationLauncherSingleton;
-
-#endif //APPLICATION_LAUNCHER_H
+++ /dev/null
-Child protection (Parental Mode)
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file child_protection_agent.cpp
- * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version 1.0
- * @brief child protection agent
- */
-
-#include "child_protection_agent.h"
-#include <dpl/assert.h>
-#include <dpl/singleton_impl.h>
-IMPLEMENT_SINGLETON(ChildProtection::Logic)
-
-namespace ChildProtection
-{
-
-Logic::Logic()
-{
- // TODO: Read protection state from DAO?
-
- // TODO: Register listener for UI protocol messages?
-}
-
-Logic::~Logic()
-{
-}
-
-bool Logic::IsEnabledFiltering(const WidgetModel *a_widgetModel) const
-{
- FREE_LOGIC_LOCK
-
- Configuration::const_iterator iter = m_widgets.find(a_widgetModel);
-
- if (iter != m_widgets.end()) {
- return iter->second.enabled;
- } else {
- return false;
- }
-}
-
-bool Logic::IsUriForbidden(const WidgetModel */*a_widgetModel*/,
- const char *a_url)
-const
-{
- FREE_LOGIC_LOCK
-
- LogDebug("Filter URI for child protection" << a_url);
- WarpIRI iri;
- for (UriFilters::const_iterator iter = m_uriFilters.begin();
- iter != m_uriFilters.end(); ++iter) {
- iri.set(a_url, false);
- if (iter->isSubDomain(iri)) {
- LogDebug("URI forbidden for children");
- return true;
- }
- }
- return false;
-}
-
-void Logic::SetBlackList(const WidgetModel */*a_widgetModel*/,
- const WrtDB::ChildProtection::BlackList& a_IriList)
-{
- using namespace WrtDB::ChildProtection;
- FREE_LOGIC_LOCK
-
- WarpIRI iri;
- for (BlackList::const_iterator iter = a_IriList.begin();
- iter != a_IriList.end(); ++iter) {
- iri.set(*iter, true);
- if (!iri.isAccessDefinition()) {
- Throw(Exception::InvalidFilterDefinition);
- }
- LogDebug("New rule added to child protection blacklist: " << *iter);
- m_uriFilters.push_back(iri);
- }
-}
-
-void Logic::Register(const WidgetModel *a_widgetModel,
- const WrtDB::ChildProtection::Record& a_record)
-{
- FREE_LOGIC_LOCK
-
- LogInfo("Widget " << a_widgetModel << " registered");
- std::pair<Configuration::iterator, bool> result =
- m_widgets.insert(std::make_pair(a_widgetModel, a_record));
- Assert(result.second && "Widget has been already added");
-}
-
-void Logic::Unregister(const WidgetModel *a_widgetModel)
-{
- FREE_LOGIC_LOCK
-
- Configuration::iterator it = m_widgets.find(a_widgetModel);
- Assert(it != m_widgets.end() && "Widget hasn't been added");
- m_widgets.erase(it);
- m_powderDescriptions.erase(a_widgetModel);
-}
-
-void Logic::SetPowderDescription(const WidgetModel *a_widgetModel,
- const WrtDB::Powder::Description& a_description)
-{
- FREE_LOGIC_LOCK
-
- LogInfo("Powder description set for widget " << a_widgetModel);
- std::pair<PowderDescriptions::iterator, bool> result =
- m_powderDescriptions.insert(std::make_pair(a_widgetModel,
- a_description));
- Assert(result.second &&
- "Widget description has been already added");
-}
-
-void Logic::SetPowderRules(const WidgetModel *a_widgetModel,
- const WrtDB::ChildProtection::PowderRules& a_rules)
-{
- FREE_LOGIC_LOCK
-
- LogInfo("Powder rules set for widget " << a_widgetModel);
- m_rules = a_rules;
-}
-
-bool Logic::IsWidgetAllowed(const WidgetModel *a_widgetModel) const
-{
- FREE_LOGIC_LOCK
-
- LogInfo("Powder processing for widget " << a_widgetModel);
- PowderDescriptions::const_iterator descIter =
- m_powderDescriptions.find(a_widgetModel);
- Assert(descIter != m_powderDescriptions.end());
- WrtDB::ChildProtection::PowderRules::ResultPair result =
- m_rules.isDescriptionValid(descIter->second);
- if (result.first) {
- return true;
- } else {
- LogWarning("Widget is not allowed for children");
- return false;
- }
-}
-} //namespace ChildProtection
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file child_protection_agent.h
- * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version 1.0
- * @brief child protection agent
- */
-
-#ifndef _CHILD_PROTECTION_AGENT_
-#define _CHILD_PROTECTION_AGENT_
-
-#include <vector>
-#include <utility>
-#include <dpl/singleton.h>
-#include <dpl/exception.h>
-#include <dpl/string.h>
-#include <dpl/utils/warp_iri.h>
-#include "widget_model.h"
-#include "powder_syntax.h"
-#include "dpl/optional_typedefs.h"
-#include <dpl/wrt-dao-ro/common_dao_types.h>
-
-#include <FreeLogic.h>
-
-namespace ChildProtection {
-//! Filename used by parental filter
-//! All forbidden URLs are replaced with this URL
-const char ForbiddenUri[] = "file:///usr/etc/wrt/parental.png";
-
-//! Returns true if privacy is rules are not break
-//TODO: Implement
-bool PowderPrivacyCheck(const Powder::Privacy::Digested::Knowledge& privacy);
-
-class Logic : public FreeLogic
-{
- public:
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, InvalidFilterDefinition)
- };
- Logic();
- ~Logic();
-
- //Global
- bool IsParentalModeActive() const
- {
- FREE_LOGIC_LOCK
-
- //TODO: Use static DAO function to check it
- return false;
- }
- void Register(const WidgetModel *a_widgetModel,
- const WrtDB::ChildProtection::Record& a_record);
- void Unregister(const WidgetModel *a_widgetModel);
-
- //URI filter
- bool IsEnabledFiltering(const WidgetModel *a_widgetModel) const;
- bool IsUriForbidden(const WidgetModel *a_widgetModel,
- const char *a_url)
- const;
- void SetBlackList(const WidgetModel *a_widgetModel,
- const WrtDB::ChildProtection::BlackList& a_IriList);
-
- //Powder
- void SetPowderDescription(const WidgetModel *a_widgetModel,
- const WrtDB::Powder::Description& a_description);
- void SetPowderRules(const WidgetModel *a_widgetModel,
- const WrtDB::ChildProtection::PowderRules& a_description);
- bool IsWidgetAllowed(const WidgetModel *a_widgetModel) const;
-
- private:
- //URI filter
- typedef std::map<const WidgetModel*,
- WrtDB::ChildProtection::Record> Configuration;
- Configuration m_widgets;
- typedef std::vector<WarpIRI> UriFilters;
- UriFilters m_uriFilters;
-
- //Powder
- typedef std::map<const WidgetModel *, WrtDB::Powder::Description>
- PowderDescriptions;
- PowderDescriptions m_powderDescriptions;
-
- WrtDB::ChildProtection::PowderRules m_rules;
-};
-
-typedef DPL::Singleton<Logic> LogicSingleton;
-} //namespace ChildProtection
-
-#endif //ifndef _CHILD_PROTECTION_AGENT_
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file common_error.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Header file for common error definitions
- */
-#ifndef COMMON_ERROR_H
-#define COMMON_ERROR_H
-
-namespace CommonError {
-enum Type
-{
- WrtSuccess, ///< Success
-
- HandleNotFound, ///< Widget handle was not found
- AlreadyRunning, ///< Widget is already running
- AlreadyStopped, ///< Widget is already stopped
- InvalidLanguage, ///< Widget is invalid in current locales
- StillAuthorizing, ///< Widget is still autorizing and has not yet finished it
- EarlyKilled, ///< Widget was early killed during launch
- AccessDenied, ///< Access denied from ACE
- CertificateRevoked, ///< Some certificate was revoked.
- /// Widget is not allowed to run.
- DatabaseFailure, ///< Wrong database version
- NoPath, ///< Required path does not exist
-
- Unknown ///< Temporary error. Try to not use this.
-};
-}
-
-#endif // COMMON_ERROR_H
+++ /dev/null
-Dnet handling
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file dnet.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @author Koeun Choi (koeun.choi@samsung.com)
- * @version 1.0
- * @brief dnet support
- */
-
-#include <cstdio>
-#include <unistd.h>
-
-#include "dnet.h"
-#include <ewk_settings.h>
-#include <ewk_network.h>
-#include <dpl/log/log.h>
-#include <dpl/singleton_impl.h>
-IMPLEMENT_SINGLETON(Net)
-
-#ifdef USE_DNET
-namespace // anonymous
-{
-const char *DNET_CLOSE_RSP_CB = "NetCloseRspCallback";
-const char *DNET_CLOSE_IND_CB = "NetCloseIndCallback";
-} //namespace anonymous
-#endif
-
-Net::Net()
-{
-#ifdef USE_DNET
- m_connectionStatus = DNET_DISCONNECTED;
- m_clientStatus = DNET_CLIENT_NOT_REGISTERED;
-#else
-
-#endif
-}
-
-Net::~Net()
-{
-}
-
-int Net::GetConnectionStatus() const
-{
-#ifdef USE_DNET
- int status = static_cast<int>(m_connectionStatus);
-#else
- int status = 0;
- vconf_get_int(VCONFKEY_NETWORK_STATUS, &status);
-#endif
- return status;
-}
-
-#ifdef USE_DNET
-NetCMNetworkStatus_t Net::GetNetworkStatus(NetCMNetworkType networkType)
-{
- NetCMNetworkStatus_t retStatus = NET_STATUS_UNKNOWN;
- NetCMNetworkStatus_t NetStatus;
-
- int result = net_get_network_status(networkType, &NetStatus);
-
- if (result == NET_ERR_NONE) {
- if (NetStatus == NET_STATUS_UNAVAILABLE) {
- LogError("[NET] Service not available");
- } else if (NetStatus == NET_STATUS_AVAILABLE) {
- LogDebug("[NET] Service available");
- } else if (NetStatus == NET_STATUS_UNKNOWN) {
- LogError("[NET] Service unknown");
- } else {
- LogError("[NET] Unknown status");
- }
- retStatus = NetStatus;
- } else if (result == NET_ERR_INVALID_CLIENT) {
- LogError(
- "[NET] client is not registered with CM and it cannot use CM services\n");
- } else if (result == NET_ERR_UNKNOWN) {
- LogError("[NET] unknown error has occurred");
- } else if (result == NET_ERR_INVALID_PARAM) {
- LogError("[NET] parameter value is invalid.");
- } else {
- LogError("[NET] unknown return type");
- }
-
- LogDebug("[NET] dnetGetNetworkStatus Interface: " << networkType <<
- " status is: " << retStatus);
-
- return retStatus;
-}
-
-void Net::SetConnectionStatus(NetConnectionStatus connStatus)
-{
- m_connectionStatus = connStatus;
- LogInfo("[NET] 0:discon, 1:trytocon, 2:trytodiscon, 3:CON, 4:conerr");
- LogDebug("[NET] status : " << m_connectionStatus);
-}
-
-int Net::GetClientStatus() const
-{
- int status = static_cast<int>(m_clientStatus);
- LogInfo("[NET] 0:discon, 1:trytocon, 2:trytodiscon, 3:CON, 4:conerr");
- LogDebug("[NET] status : " << status);
- return status;
-}
-
-void Net::SetClientStatus(NetClientStatus connStatus)
-{
- m_clientStatus = connStatus;
-}
-
-void Net::NetOpenRspCallback(const NetErr_t error,
- const NetDevInfo_t *dev,
- int transportErrorCode,
- void *userData)
-{
- LogDebug(
- "[NET] NetOpenRspCallback: error: " << error <<
- " transportErrorCode: " <<
- transportErrorCode);
- Net *dnetInstance = static_cast<Net *>(userData);
- if (error == NET_ERR_NONE) {
- LogInfo("[NET] Successful PDP Activation");
- /************************** getting device info **********************************/
- LogDebug("[NET] = Device name " << dev->DevName);
- LogDebug("[NET] = Profile id " << dev->Profileid);
- /************* getting proxy value ******************/
- //TODO: ask dnet team if net_get_current_proxy returns string which needs to be duplicated and how long it lives
- std::string dnetProxy = net_get_current_proxy();
- LogDebug(
- "[NET] = Proxy Addr = [" << dnetProxy << "] will set on webkit");
- ewk_network_proxy_uri_set(dnetProxy.c_str());
- /***************************************************/
- dnetInstance->SetConnectionStatus(DNET_CONNECTED);
- } else {
- LogError("[NET] dnet connect fail. ");
- dnetInstance->SetConnectionStatus(DNET_CONNECT_ERROR);
- }
- if (dnetInstance->m_dnetOpenCallbackPtr) {
- dnetInstance->m_dnetOpenCallbackPtr(dnetInstance->m_open, error);
- }
-}
-
-void Net::NetCloseRspCallback(NetErr_t error,
- int transportErrorCode,
- void *userData)
-{
- LogDebug("[NET] NetCloseRspCallback: error: " << error <<
- " transportErrorCode: " << transportErrorCode);
-
- Net *dnetInstance = static_cast<Net *>(userData);
- dnetInstance->NetConnectionClosed(DNET_CLOSE_RSP_CB,
- userData,
- error,
- transportErrorCode);
-}
-
-void Net::NetKillRspCallback(NetErr_t error,
- int transportErrorCode,
- void *userData)
-{
- LogDebug("[NET] NetKillRspCallback: error: " << error <<
- " transportErrorCode: " << transportErrorCode);
- Net *dnetInstance = static_cast<Net *>(userData);
- dnetInstance->NetConnectionClosed(DNET_CLOSE_RSP_CB,
- userData,
- error,
- transportErrorCode);
-}
-
-void Net::NetCloseIndCallback(NetErr_t error,
- int transportErrorCode,
- void *userData)
-{
- LogDebug("[NET] NetCloseIndCallback: error: " << error <<
- " transportErrorCode: " << transportErrorCode);
- // dnet is disconnected by some reasons.
- Net *dnetInstance = static_cast<Net *>(userData);
- dnetInstance->NetConnectionClosed(DNET_CLOSE_IND_CB,
- userData,
- error,
- transportErrorCode);
- //cleaning up network session is needed!!!! for Wifi<->3G switching
- ewk_network_session_requests_cancel();
- //dnetInstance->Open();
-}
-
-void Net::NetNetStatusCallback(NetStatusInfo_t *net_status,
- void *userData)
-{
- (void)userData;
- LogDebug(
- "[NET] NetNetStatusCallback transportType: " <<
- net_status->transportType <<
- " NwkStatus: " << net_status->NwkStatus <<
- " PDPStatus: " << net_status->PDPStatus <<
- " WiFiStatus: " << net_status->WiFiStatus);
-}
-
-void Net::NetIpChangeIndCallback(const NetDevInfo_t *dev,
- int transportErrorCode,
- void */*userData*/)
-{
- LogDebug("[NET] NetIpChangeIndCallback DevName: " << dev->DevName <<
- " transportErrorCode: " << transportErrorCode);
-
- // 3g -> wifi automatically set by dnet
- //cleaning up network session is needed!!!! for Wifi<->3G switching
- ewk_network_session_requests_cancel();
-
- /************* getting proxy value ******************/
- //TODO: ask dnet team if net_get_current_proxy returns string which needs to be duplicated and how long it lives
- std::string dnetProxy = net_get_current_proxy();
- LogDebug("[NET] = Proxy Addr = [" << dnetProxy << "] will set on webkit");
- ewk_network_proxy_uri_set(dnetProxy.c_str());
- /***************************************************/
-}
-
-void Net::NetProfileModIndCallback(const NetErr_t error,
- int transportErrorCode,
- void */*userData*/)
-{
- LogDebug("[NET] error: " << error <<
- ", transportErrorCode: " << transportErrorCode);
-
- //cleaning up network session is needed!!!! for Wifi<->3G switching
- ewk_network_session_requests_cancel();
-
- /************* getting proxy value ******************/
- //TODO: ask dnet team if net_get_current_proxy returns string which needs to be duplicated and how long it lives
- std::string dnetProxy = net_get_current_proxy();
- LogDebug("[NET] = Proxy Addr = [" << dnetProxy << "] will set on webkit");
- ewk_network_proxy_uri_set(dnetProxy.c_str());
- /***************************************************/
-}
-
-void Net::NetConnectionClosed(const char* str_callback,
- void *userData,
- NetErr_t error,
- int transportErrorCode)
-{
- (void)userData;
- LogDebug("[NET] str_callback: " << str_callback << " : error: " << error <<
- " transportErrorCode: " << transportErrorCode);
- SetConnectionStatus(DNET_DISCONNECTED);
- if (error == NET_ERR_NONE) {
- if (m_dnetCloseCallbackPtr) {
- m_dnetCloseCallbackPtr(m_close, error);
- }
- }
-}
-
-bool Net::Register()
-{
- int ret;
-
- /******** register callbacks *****************/
- struct net_event_callbacks dnet_cm_evt_cb;
- dnet_cm_evt_cb.on_open_rsp = NetOpenRspCallback;
- dnet_cm_evt_cb.on_close_rsp = NetCloseRspCallback;
- dnet_cm_evt_cb.on_kill_rsp = NetKillRspCallback;
- dnet_cm_evt_cb.on_close_ind = NetCloseIndCallback;
- dnet_cm_evt_cb.on_suspend_ind = NULL;
- dnet_cm_evt_cb.on_resume_ind = NULL;
- dnet_cm_evt_cb.on_net_status = NetNetStatusCallback;
- dnet_cm_evt_cb.on_ip_change = NetIpChangeIndCallback;
- dnet_cm_evt_cb.on_tunnel_resp = NULL;
- dnet_cm_evt_cb.on_profile_mod_ind = NetProfileModIndCallback;
- /***********************************************************/
-
- ret = net_register_client(&dnet_cm_evt_cb, this);
- if (ret == NET_ERR_NONE) {
- SetClientStatus(DNET_CLIENT_REGISTERED);
- return true;
- }
- LogDebug("[NET] Register NetClient: " << ret);
- return false;
-}
-
-int Net::Deregister()
-{
- int err = -1;
- int retVal = 0;
-
- err = net_deregister_client();
- if (err == NET_ERR_NONE) {
- SetClientStatus(DNET_CLIENT_NOT_REGISTERED);
- } else {
- LogDebug("[NET] dnet Close: error deregistering client: " << err);
- retVal = -1;
- }
-
- return retVal = -1;
-}
-
-bool Net::IsConnected() const
-{
- if (m_connectionStatus == DNET_CONNECTED) {
- return true;
- }
- return false;
-}
-
-bool Net::Open(OpenCallback openCallbackPtr,
- void *data)
-{
- int ret = NET_ERR_NONE;
- m_dnetOpenCallbackPtr = openCallbackPtr;
- m_open = data;
-
- LogDebug("[NET] dnet connection status : " << m_connectionStatus);
- if (m_connectionStatus == DNET_CONNECTED) {
- LogDebug("[NET] dnet is already connected");
- return false;
- }
-
- //register is needed only one time.
- if (GetClientStatus() == DNET_CLIENT_NOT_REGISTERED) {
- LogDebug("[NET] dnet Open : client not registered, registering it");
- if (Register() == false) {
- return false;
- }
- }
-
- LogDebug("[NET] dnet Open: opening connection");
- SetConnectionStatus(DNET_TRY_TO_CONNECT);
-
- // NET_DEFAULT_TYPE means that it can be WIFI(if available) or 3G
- ret = net_open_connection(NET_DEFAULT_TYPE);
- if (ret == NET_ERR_NONE) {
- LogDebug("[NET] dnet Open : connection initializes");
- return true;
- } else if (ret == NET_ERR_ACTIVE_CONNECTION_EXISTS) {
- LogDebug("[NET] dnet Open : aleady connected");
- SetConnectionStatus(DNET_CONNECTED);
- return false;
- } else {
- SetConnectionStatus(DNET_CONNECT_ERROR);
- LogDebug("[NET] dnet Open : connection initialize error = " << ret);
- return false;
- }
- return false;
-}
-
-int Net::Close(CloseCallback closeCallbackPtr,
- void *data)
-{
- int err = NET_ERR_NONE;
- m_dnetCloseCallbackPtr = closeCallbackPtr;
- m_close = data;
-
- int retVal = 0;
-
- /**************** closing connection **************************/
- if (!net_is_connected()) {
- LogDebug("[NET] net is not connected..");
- }
-
- LogDebug("[NET] dnet Close : connection close");
- SetConnectionStatus(DNET_TRY_TO_DISCONNECT);
- err = net_close_connection();
- if (err != NET_ERR_NONE) {
- LogDebug("[NET] dnet Close: error closing connection: " << err);
- retVal = -1;
- }
- /**************************************************************/
-
- return retVal;
-}
-#else
-void Net::RegisterIpChangedCallback()
-{
- vconf_notify_key_changed(VCONFKEY_NETWORK_IP, IpChangedCallback, NULL);
-}
-
-void Net::DeregisterIpChangedCallback()
-{
- vconf_ignore_key_changed(VCONFKEY_NETWORK_IP, IpChangedCallback);
-}
-void Net::IpChangedCallback(keynode_t* /*key*/,
- void* /*data*/)
-{
- LogDebug("[NET] Proxy=[" << vconf_get_str(VCONFKEY_NETWORK_PROXY) << "]");
- ewk_network_proxy_uri_set(vconf_get_str(VCONFKEY_NETWORK_PROXY));
-}
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file dnet.h
- * @author Koeun Choi (koeun.choi@samsung.com)
- * @version 1.0
- * @brief net support
- */
-
-#ifndef NET_H
-#define NET_H
-
-#include <glib.h>
-#ifdef USE_DNET
-#include <NetCMIntf.h>
-#include <NetCMError.h>
-#include <NetPMIntf_ext.h>
-#endif
-#include <vconf.h>
-#include <dpl/singleton.h>
-
-class Net
-{
-#ifdef USE_DNET
- //dnet callback
- static void NetOpenRspCallback(const NetErr_t error,
- const NetDevInfo_t *dev,
- int transportErrorCode,
- void *userData);
- static void NetCloseRspCallback(NetErr_t error,
- int transportErrorCode,
- void *userData);
- static void NetKillRspCallback(NetErr_t error,
- int transportErrorCode,
- void *userData);
- static void NetCloseIndCallback(NetErr_t error,
- int transportErrorCode,
- void *userData);
- static void NetNetStatusCallback(NetStatusInfo_t *net_status,
- void *userData);
- static void NetIpChangeIndCallback(const NetDevInfo_t *dev,
- int transportErrorCode,
- void *userData);
- static void NetProfileModIndCallback(const NetErr_t error,
- int transportErrorCode,
- void *userData);
-#else
- public:
- static void RegisterIpChangedCallback();
- static void DeregisterIpChangedCallback();
- private:
- static void IpChangedCallback(keynode_t *key,
- void *data);
-#endif
-
-#ifdef USE_DNET
- private:
- enum NetConnectionStatus
- {
- DNET_DISCONNECTED,
- DNET_TRY_TO_CONNECT,
- DNET_TRY_TO_DISCONNECT,
- DNET_CONNECTED,
- DNET_CONNECT_ERROR
- };
-
- enum NetClientStatus
- {
- DNET_CLIENT_NOT_REGISTERED,
- DNET_CLIENT_REGISTERED
- };
-
- NetConnectionStatus m_connectionStatus;
- NetClientStatus m_clientStatus;
-
- //callback
- typedef void (*OpenCallback)(void *, int);
- typedef void (*CloseCallback)(void *, int);
-
- typedef void (*NetOpenCallback)(void *, int);
- typedef void (*NetCloseCallback)(void *, int);
-
- bool m_indChanged;
- void *m_open;
- void *m_close;
-
- NetOpenCallback m_dnetOpenCallbackPtr;
- NetCloseCallback m_dnetCloseCallbackPtr;
-
- //status
- NetCMNetworkStatus_t GetNetworkStatus(NetCMNetworkType networkType);
- void SetConnectionStatus(NetConnectionStatus connStatus);
- int GetClientStatus() const;
- void SetClientStatus(NetClientStatus connStatus);
-
- void NetConnectionClosed(const char* str_callback,
- void *userData,
- NetErr_t error,
- int transportErrorCode);
-
- public:
- bool IsConnected() const;
-
- //Register/Deregister
- bool Register();
- int Deregister();
-
- //Connect/Disconnect
- bool Open(OpenCallback openCallbackPtr = 0,
- void *data = NULL);
- int Close(CloseCallback closeCallbackPtr = 0,
- void *data = NULL);
-#endif
- public:
- //Constructor/Destructor
- Net();
- ~Net();
- int GetConnectionStatus() const;
-};
-
-typedef DPL::Singleton<Net> NetSingleton;
-
-#endif /* NET_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* @file AutoSavePopup.cpp
- * @author Soyoung Kim (sy037.kim@samsung.com)
- * @version 1.0
- * @brief Implementation of popup for AutoSave
- *
- */
-
-#include <dpl/log/log.h>
-#include <PopupInvoker.h>
-#include "AutoSavePopup.h"
-#include <dpl/wrt-dao-rw/global_dao.h>
-
-namespace {
-const char AUTOSAVE_ASK_MSG[] = "Do you want to remember the password on ";
-const char AUTOSAVE_ASK_TITLE[] = "Ask to save ID, password";
-}
-
-using namespace WrtDB;
-
-void AutoSavePopup::checkAutoSave(const DPL::String &url,
- const GlobalDAO::AutoSaveData &userdata)
-{
- LogDebug("Enter");
- bool answer = PopupInvoker().askYesNo(AUTOSAVE_ASK_TITLE, AUTOSAVE_ASK_MSG);
-
- if (answer) {
- LogDebug("Answer : YES, Regist Id, Password for auto save");
- GlobalDAO::SetAutoSaveIdPasswd(url, userdata);
- } else {
- LogDebug("Answer : NO, Do not Regist Id, Password");
- }
- LogDebug("Exit");
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* @file autosavePopup.h
- * @author Soyoung Kim (sy037.kim@samsung.com)
- * @version 1.0
- *
- */
-
-#ifndef WRT_SRC_DOMAIN_EFL_AUTOSAVE_POPUP_H_
-#define WRT_SRC_DOMAIN_EFL_AUTOSAVE_POPUP_H_
-
-#include <iostream>
-#include <dpl/string.h>
-#include <dpl/wrt-dao-rw/global_dao.h>
-
-class AutoSavePopup
-{
- public:
- void checkAutoSave(const DPL::String &url,
- const WrtDB::GlobalDAO::AutoSaveData &userdata);
-};
-
-#endif //WRT_SRC_DOMAIN_EFL_AUTOSAVE_POPUP_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* @file CommunicationBox.cpp
- * @author Justyna Mejzner (j.kwiatkowsk@samsung.com)
- * @version 1.0
- *
- */
-#include "CommunicationBox.h"
-#include <stddef.h>
-#include <dpl/log/log.h>
-
-void CommunicationBox::showAsync(
- const Prompt::PromptModel::PromptType promptType,
- const std::string& mainLabel,
- const std::vector<std::string>& buttonLabels,
- const DPL::OptionalString& checkLabel,
- ResponseDelegate callback,
- void* userdata)
-{
- m_callback = callback;
- m_userdata = userdata;
- m_promptType = promptType;
- using namespace DPL::Popup;
-
- CtrlPopupPtr popup = PopupControllerSingleton::Instance().CreatePopup();
- popup->Append(new PopupObject::Label(mainLabel));
-
- if (!!checkLabel)
- {
- popup->Append(new PopupObject::Check(DPL::ToUTF8String(*checkLabel)));
- }
-
- for (size_t questionIndex = 0; questionIndex < buttonLabels.size();
- ++questionIndex)
- {
- popup->Append(new PopupObject::Button(
- buttonLabels[questionIndex],questionIndex));
- }
-
-
- ListenForAnswer(popup);
-
- //nested loop is not used here
- ShowPopupEvent event(popup,
- MakeAnswerCallback(
- this,
- &CommunicationBox::AnswerCallback),
- DPL::Event::UNDEFINED_LOOP_HANDLE);
-
- CONTROLLER_POST_EVENT(PopupController,
- event);
-}
-
-void CommunicationBox::AnswerCallback(const DPL::Popup::AnswerCallbackData &answer)
-{
- m_callback(answer.buttonAnswer, answer.chackState, m_userdata);
-}
-
-
-Prompt::PromptModel::PromptType CommunicationBox::getPromptType() const
-{
- return m_promptType;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/* @file CommunicationBox.h
- * @author Justyna Mejzner (j.kwiatkowsk@samsung.com)
- * @version 1.0
- *
- */
-
-#ifndef _WRT_SRC_DOMAIN_EFL_COMMUNICATION_BOX_H
-#define _WRT_SRC_DOMAIN_EFL_COMMUNICATION_BOX_H
-
-#include <memory>
-#include <iostream>
-#include <dpl/string.h>
-#include <dpl/fast_delegate.h>
-#include <dpl/optional_typedefs.h>
-#include <dpl/popup/popup_controller.h>
-#include <dpl/popup/popup_manager.h>
-#include <dpl/popup/popup_renderer.h>
-#include <framework_efl.h>
-#include <dpl/ace-dao-ro/PromptModel.h>
-
-class CommunicationBox :
- public DPL::Popup::PopupControllerUser
-{
- private:
- void AnswerCallback(const DPL::Popup::AnswerCallbackData &answer);
-
- public:
- typedef DPL::FastDelegate<void (int buttonAnswer,
- bool checkState,
- void* userdata)>
- ResponseDelegate;
-
- CommunicationBox() :
- m_promptType(Prompt::PromptModel::PROMPT_ONESHOT),
- m_callback(NULL),
- m_userdata(NULL)
- {
- }
-
- void showAsync(const Prompt::PromptModel::PromptType promptType,
- const std::string& mainLabel,
- const std::vector<std::string>& buttonLabels,
- const DPL::OptionalString& checkLabel,
- ResponseDelegate callback,
- void* userdata);
-
- Prompt::PromptModel::PromptType getPromptType() const;
-
- private:
-
- Prompt::PromptModel::PromptType m_promptType;
- ResponseDelegate m_callback;
- void* m_userdata;
-};
-
-#endif //_WRT_SRC_DOMAIN_EFL_COMMUNICATION_BOX_H
+++ /dev/null
-EFL UI support
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file base_browser_setting.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Browser setting interface declaration.
- */
-
-#ifndef WRT_SRC_DOMAIN_EFL_BASEBROWSERSETTING_H_
-#define WRT_SRC_DOMAIN_EFL_BASEBROWSERSETTING_H_
-
-#include <string>
-#include <framework_efl.h>
-
-class BaseBrowserSetting
-{
- public:
- virtual ~BaseBrowserSetting(){};
- virtual void passUserAgentToWebkit() = 0;
- protected:
- explicit BaseBrowserSetting(Evas_Object *elmWebview) :
- m_elmWebview(elmWebview)
- {
- };
- Evas_Object* m_elmWebview;
-};
-
-
-#endif /* WRT_SRC_DOMAIN_EFL_BASEBROWSERSETTING_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file combobox_picker.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Implementation of picker for combox
- */
-
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-
-#include <Ecore_X.h>
-#include <ui-gadget.h>
-#include <combobox_picker.h>
-
-namespace {
-static const std::string SuccessString("Success");
-static const size_t BUFFER_LENGTH = 100;
-static const size_t KEY_LENGTH = 10;
-}
-
-//This class is to not include ui-gagdet in header file
-class ComboboxPickerCB
-{
- public:
- static void pickerLayoutCb(ui_gadget *ug,
- ug_mode mode,
- void *priv);
- static void pickerResultCb(ui_gadget *ug,
- bundle *result,
- void *priv);
- static void pickerDestroyCb(ui_gadget *ug,
- void *priv);
-};
-
-ComboboxPicker::ComboboxPicker(Evas_Object * win,
- Evas_Object * navigation,
- Evas_Object * layout_main) :
- m_win(win),
- m_navigation(navigation),
- m_layout_main(layout_main),
- m_comboboxPicker(NULL),
- m_comboboxCallback(NULL),
- m_calledCallback(true),
- m_pickerUg(NULL),
- m_userdata(NULL)
-{
- LogInfo("Create ComboboxPicker");
- m_comboboxPicker = elm_box_add(m_navigation);
- elm_box_horizontal_set(m_comboboxPicker, EINA_TRUE);
- elm_box_homogeneous_set(m_comboboxPicker, EINA_TRUE);
-
- elm_layout_content_set(m_layout_main,
- "elm.swallow.comboboxPicker",
- m_comboboxPicker);
- // evas_object_size_hint_weight_set(comboboxPicker, EVAS_HINT_EXPAND,
- //EVAS_HINT_EXPAND);
- evas_object_show(m_comboboxPicker);
-}
-
-ComboboxPicker::~ComboboxPicker()
-{
- HideComboboxPicker();
- evas_object_del(m_comboboxPicker);
-}
-
-void ComboboxPicker::HideComboboxPicker()
-{
- if (m_calledCallback == false) {
- m_calledCallback = true;
- if (m_comboboxCallback != NULL) {
- CallCallback(m_userdata, DPL::OptionalInt::Null);
- }
- LogDebug("Hiding combobox picker");
- edje_object_signal_emit(elm_layout_edje_get(
- m_layout_main), "hide,comboboxPicker", "");
- ug_destroy(m_pickerUg);
- m_pickerUg = NULL;
- }
-}
-
-void ComboboxPicker::CallCallback(void* userdata,
- const DPL::OptionalInt& index)
-{
- if (m_calledCallback == true) {
- LogDebug("Last callback already called");
- return;
- } else {
- if (m_comboboxCallback != NULL) {
- if (!index) {
- LogDebug("This is last callback called");
- HideComboboxPicker();
- }
- LogDebug("Calling combobx calback");
- m_comboboxCallback(index, userdata);
- } else {
- m_calledCallback = true;
- }
- }
-}
-
-void ComboboxPicker::ShowComboboxPicker(int length,
- char const * const * const option,
- ComboboxPickerCallback callback,
- void * userdata)
-{
- if (m_pickerUg != NULL) {
- HideComboboxPicker();
- }
-
- m_comboboxCallback = callback;
- m_userdata = userdata;
-
- m_calledCallback = false;
-
- bundle *b;
- struct ug_cbs cbs = {0, 0, 0, 0};
-
- b = bundle_create();
- if (b == NULL) {
- LogError("Failed to create bundle");
- return;
- }
-
- char buf[BUFFER_LENGTH];
- snprintf(buf, sizeof(buf), "%d", length);
-
- LogDebug("Add buf to Bundle ");
- if (bundle_add(b, "Count", buf)) {
- LogError("Bundle_add failed");
- //we silently assume that bundle_free will cleanup
- //although error has occured
- //just like Browser team does
- }
-
- char key[KEY_LENGTH] = "";
- const size_t lengthSize = length * (sizeof(option) / sizeof(*option));
-
- for (size_t i = 0; i < lengthSize; ++i) {
- LogDebug("key[" << i << "]=" << option[i]);
- snprintf(key, sizeof(key), "%d", i);
- if (bundle_add(b, key, option[i])) {
- LogError("bundle_add has failed.");
- }
- }
-
- cbs.layout_cb = ComboboxPickerCB::pickerLayoutCb;
- cbs.result_cb = ComboboxPickerCB::pickerResultCb;
- cbs.destroy_cb = ComboboxPickerCB::pickerDestroyCb;
- cbs.priv = this;
-
- LogInfo("Create ug");
- m_pickerUg = ug_create(NULL,
- "picker-efl",
- UG_MODE_FRAMEVIEW,
- b,
- &cbs);
-
- if (m_pickerUg == NULL) {
- LogError("Creating UG failed");
- }
-
- if (bundle_free(b)) {
- LogError("bundle_free has failed");
- }
-
- LogInfo("Emitting signal show,comboboxPicker");
- edje_object_signal_emit(elm_layout_edje_get(
- m_layout_main), "show,comboboxPicker", "");
-}
-
-void ComboboxPickerCB::pickerResultCb(ui_gadget *ug,
- bundle *result,
- void *priv)
-{
- LogInfo("pickerResultCb");
-
- ComboboxPicker * picker = static_cast<ComboboxPicker*>(priv);
-
- if (result) {
- const char *rst = bundle_get_val(result, "Result");
- if (rst) {
- if (!strncmp(rst, SuccessString.c_str(), SuccessString.length())) {
- LogInfo("Done selecting");
- picker->CallCallback(picker->m_userdata,
- DPL::OptionalInt::Null);
- ug = NULL;
- }
- }
- const char *index = bundle_get_val(result, "Index");
- if (index) {
- if (atoi(index) >= 0) {
- LogInfo("Selected index number: " << atoi(index));
- picker->CallCallback(picker->m_userdata,
- DPL::OptionalInt(atoi(index)));
- } else {
- LogWarning("Couldn't convert index to integer");
- picker->CallCallback(picker->m_userdata,
- DPL::OptionalInt::Null);
- }
-
- ug = NULL;
- }
- }
-}
-
-void ComboboxPickerCB::pickerDestroyCb(ui_gadget *ug,
- void *priv)
-{
- (void) ug;
- (void) priv;
- LogInfo("pickerDestroyCb");
-}
-
-void ComboboxPickerCB::pickerLayoutCb(ui_gadget *ug,
- ug_mode mode,
- void *priv)
-{
- LogInfo("pickerLayoutCb");
-
- Evas_Object *base;
- ComboboxPicker * picker = static_cast<ComboboxPicker*>(priv);
-
- if (picker == NULL) {
- LogError("No priv data");
- return;
- }
-
- base = static_cast<Evas_Object*>(ug_get_layout(ug));
- if (base == NULL) {
- LogError("Base is NULL");
- return;
- }
- switch (mode) {
- case UG_MODE_FRAMEVIEW:
- elm_layout_content_set(picker->m_layout_main,
- "elm.swallow.comboboxPicker",
- base);
- break;
- default:
- LogWarning(
- "Combobox layout callback was called in other UG_MODE then"\
- "UG_MODE_FRAMEVIEW");
- Assert(
- false &&
- "Combobox layout callback was called in other UG_MODE then"\
- "UG_MODE_FRAMEVIEW");
- break;
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file combobox_picker.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Header of picker for combox
- */
-
-#ifndef COMBOBOX_PICKER_H_
-#define COMBOBOX_PICKER_H_
-
-#include <framework_efl.h>
-
-#include <dpl/optional_typedefs.h>
-
-/*
- * example usage:
- *
- * void picker_callback(void* userdata, DPL::Optional<int> index)
- * {
- * if(!index.IsNull())
- * {
- * LogDebug("Index is " << *index);
- * }
- *
- * else
- * {
- * LogInfo("Picking element from combobox failed");
- * }
- **}
- *
- * std::vector<std::string> options;
- * options.push_back(std::string("hello"));
- * options.push_back(std::string("goodbye"));
- * show_combobox_picker(ad, options, picker_callback, NULL);
- *
- */
-
-struct ui_gadget; //FORWARD DECLARATION
-class ComboboxPickerCB; //FORWARD DECLARATION
-
-class ComboboxPicker
-{
- public:
- typedef void (*ComboboxPickerCallback)(const DPL::OptionalInt& index,
- void* userdata);
-
- ComboboxPicker(Evas_Object * win,
- Evas_Object * navigation,
- Evas_Object * layout_main);
- virtual ~ComboboxPicker();
-
- void CallCallback(void* userdata,
- const DPL::OptionalInt& index);
-
- void ShowComboboxPicker(int length,
- char const * const * const table,
- ComboboxPickerCallback callback,
- void* userdata);
-
- void HideComboboxPicker();
- private:
-
- Evas_Object * m_win;
-
- //navigationbar created with elm_navigationbar_add()
- Evas_Object * m_navigation;
-
- // m_layout_main reacts on "hide,comboboxPicker" / "show,comboboxPicker"
- Evas_Object * m_layout_main;
-
- Evas_Object * m_comboboxPicker;
-
- ComboboxPickerCallback m_comboboxCallback;
- bool m_calledCallback;
-
- ui_gadget * m_pickerUg;
- void* m_userdata;
-
- friend class ComboboxPickerCB;
-};
-
-#endif /*COMBOBOX_PICKER_H_*/
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file evas_object.cpp
- * @author Lukasz Wrzosek (l.wrzosel@samsung.com)
- * @version 1.0
- * @brief This file is the implementation for Evas_Object wrapper from Efl.
- */
-
-#include "evas_object.h"
-#include <dpl/foreach.h>
-
-Evas_Object* EvasObject::IConnection::GetEvasObject()
-{
- return m_object->GetObject();
-}
-
-void EvasObject::IConnection::Disconnect()
-{
- m_object->DisconnectCallback(this);
-}
-
-EvasObject::IConnection::IConnection(EvasObject::EvasObjectShared* object) :
- m_object(object)
-{
-}
-
-void EvasObject::IConnection::SmartCallbackWrapper(void* data,
- Evas_Object* /*object*/,
- void* event_info)
-{
- Assert(data);
- IConnection* Calle = static_cast<IConnection*>(data);
- Calle->Call(event_info);
-}
-
-void EvasObject::IConnection::EvasCallbackWrapper(void* data,
- Evas* /*evas*/,
- Evas_Object* /*object*/,
- void* event_info)
-{
- Assert(data);
- IConnection* Calle = static_cast<IConnection*>(data);
- Calle->Call(event_info);
-}
-
-Evas_Object* EvasObject::EvasObjectShared::GetObject()
-{
- return m_object;
-}
-
-EvasObject::EvasObjectShared::SmartConnectionBase::SmartConnectionBase(
- const std::string& name,
- EvasObject::EvasObjectShared* object) :
- IConnection(object),
- m_callbackName(name)
-{
-}
-
-void EvasObject::EvasObjectShared::SmartConnectionBase::ConnectPrv()
-{
- evas_object_smart_callback_add(GetEvasObject(),
- m_callbackName.c_str(),
- &IConnection::SmartCallbackWrapper, this);
-}
-
-void EvasObject::EvasObjectShared::SmartConnectionBase::DisconnectPrv()
-{
- evas_object_smart_callback_del(GetEvasObject(),
- m_callbackName.c_str(),
- &IConnection::SmartCallbackWrapper);
-}
-
-EvasObject::EvasObjectShared::EvasConnectionBase::EvasConnectionBase(
- Evas_Callback_Type type,
- EvasObject::EvasObjectShared* object) :
- IConnection(object),
- m_callbackType(type)
-{
-}
-
-void EvasObject::EvasObjectShared::EvasConnectionBase::ConnectPrv()
-{
- evas_object_event_callback_add(
- GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
- this);
-}
-
-void EvasObject::EvasObjectShared::EvasConnectionBase::DisconnectPrv()
-{
- evas_object_event_callback_del_full(
- GetEvasObject(), m_callbackType, &IConnection::EvasCallbackWrapper,
- this);
-}
-
-EvasObject::EvasObjectShared::EvasObjectShared() :
- m_object(NULL)
-{
-}
-
-EvasObject::EvasObjectShared::EvasObjectShared(Evas_Object* object) :
- m_object(object)
-{
- Assert(m_object);
- evas_object_event_callback_add(m_object,
- EVAS_CALLBACK_DEL,
- &StaticOnDelEvent,
- this);
-}
-
-void EvasObject::EvasObjectShared::SetObject(Evas_Object* object)
-{
- Assert(m_object == NULL);
- Assert(object != NULL);
- m_object = object;
- evas_object_event_callback_add(m_object,
- EVAS_CALLBACK_DEL,
- &StaticOnDelEvent,
- this);
-}
-
-EvasObject::EvasObjectShared::~EvasObjectShared()
-{
- if (m_object) {
- DisconnectAll();
- evas_object_event_callback_del(m_object,
- EVAS_CALLBACK_DEL,
- &StaticOnDelEvent);
- m_object = NULL;
- }
-}
-
-bool EvasObject::EvasObjectShared::DisconnectCallback(IConnection* connection)
-{
- IConnectionsSet::iterator it = m_connections.find(connection);
- if (it != m_connections.end()) {
- (*it)->DisconnectPrv();
- delete connection;
- m_connections.erase(it);
- return true;
- }
- return false;
-}
-
-void EvasObject::EvasObjectShared::DisconnectAll()
-{
- FOREACH(it, m_connections)
- {
- (*it)->DisconnectPrv();
- delete *it;
- }
- m_connections.clear();
-}
-
-void EvasObject::EvasObjectShared::StaticOnDelEvent(void* data,
- Evas* /*e*/,
- Evas_Object* /*o*/,
- void* /*ev*/)
-{
- Assert(data);
- EvasObjectShared* This = static_cast<EvasObjectShared*>(data);
- if (This->m_object) {
- evas_object_event_callback_del(This->m_object,
- EVAS_CALLBACK_DEL,
- &StaticOnDelEvent);
- This->DisconnectAll();
- This->m_object = NULL;
- }
-}
-
-EvasObject::EvasObject() :
- m_object(new EvasObjectShared())
-{
-}
-
-EvasObject::EvasObject(Evas_Object* object) :
- m_object(new EvasObjectShared(object))
-{
-}
-
-EvasObject::EvasObject(const EvasObject& other) :
- m_object(other.m_object)
-{
-}
-
-//this destructor must be here to let pimpl with shared_ptr work without warning
-EvasObject::~EvasObject()
-{
-}
-
-EvasObject& EvasObject::operator=(const EvasObject& other)
-{
- Assert(m_object);
- m_object = other.m_object;
- return *this;
-}
-
-EvasObject* EvasObject::operator=(Evas_Object* object)
-{
- Assert(m_object);
- m_object->SetObject(object);
- return this;
-}
-
-bool EvasObject::DisconnectCallback(IConnection* connection)
-{
- Assert(m_object);
- return m_object->DisconnectCallback(connection);
-}
-
-void EvasObject::DisconnectAll()
-{
- Assert(m_object);
- m_object->DisconnectAll();
-}
-
-EvasObject::operator Evas_Object *()
-{
- Assert(m_object);
- return m_object->GetObject();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file evas_object.h
- * @author Lukasz Wrzosek (l.wrzosel@samsung.com)
- * @version 1.0
- * @brief This file is the header for Evas_Object wrapper from Efl.
- */
-#ifndef WRT_SRC_DOMAIN_EFL_EVAS_OBJECT_H
-#define WRT_SRC_DOMAIN_EFL_EVAS_OBJECT_H
-
-#include <dpl/framework_efl.h>
-#include <dpl/assert.h>
-#include <dpl/shared_ptr.h>
-#include <dpl/foreach.h>
-#include <dpl/apply.h>
-#include <set>
-#include <string>
-#include <tuple>
-#include <utility>
-
-class EvasObject
-{
- class EvasObjectShared;
- typedef DPL::SharedPtr<EvasObjectShared> EvasObjectSharedPtr;
-
- public:
- class IConnection
- {
- public:
- Evas_Object* GetEvasObject();
- void Disconnect();
-
- private:
- IConnection(EvasObjectShared* object);
- virtual ~IConnection()
- {
- }
- virtual void Call(void* /*event_info*/) = 0;
-
- static void SmartCallbackWrapper(void* data,
- Evas_Object* /*object*/,
- void* event_info);
- static void EvasCallbackWrapper(void* data,
- Evas* /*evas*/,
- Evas_Object* /*object*/,
- void* event_info);
-
- virtual void ConnectPrv() = 0;
- virtual void DisconnectPrv() = 0;
-
- friend class EvasObjectShared;
-
- EvasObjectShared* m_object;
- };
-
- private:
- class EvasObjectShared : DPL::Noncopyable
- {
- public:
- friend class IConnection;
- Evas_Object* GetObject();
-
- typedef std::set<IConnection*> IConnectionsSet;
-
- class SmartConnectionBase : public IConnection
- {
- public:
- SmartConnectionBase(const std::string& name,
- EvasObjectShared* object);
-
- virtual void ConnectPrv();
- virtual void DisconnectPrv();
- std::string m_callbackName;
- };
-
- template<typename ... Args>
- class SmartConnection : public SmartConnectionBase
- {
- public:
- typedef void (*CbType)(IConnection* connection,
- void* event_info,
- Args ... args);
-
- SmartConnection(const std::string& name,
- CbType callback,
- EvasObjectShared* object,
- Args ... args) :
- SmartConnectionBase(name, object),
- m_callback(callback),
- m_args(args ...)
- {
- }
-
- virtual ~SmartConnection()
- {
- }
-
- virtual void Call(void* event_info)
- {
- DPL::Apply<void,
- DPL::ExtraArgsInsertPolicy::Prepend>(m_callback,
- m_args,
- this,
- event_info);
- }
-
- private:
- CbType m_callback;
- std::tuple<Args ...> m_args;
- };
-
- template <class ThisType, class ArgType1>
- class SmartMemberConnection1 : public SmartConnectionBase
- {
- public:
- typedef void (ThisType::*CbType)(IConnection* connection,
- void* event_info, ArgType1 *arg1);
-
- SmartMemberConnection1(const std::string& name,
- CbType callback,
- ThisType* callee,
- ArgType1* arg1,
- EvasObjectShared* object) :
- SmartConnectionBase(name, object),
- m_callback(callback),
- m_callee(callee),
- m_arg1(arg1)
- {
- }
-
- virtual ~SmartMemberConnection1()
- {
- }
-
- virtual void Call(void* event_info)
- {
- (m_callee->*m_callback)(this, event_info, m_arg1);
- }
-
- private:
- CbType m_callback;
- ThisType* m_callee;
- ArgType1* m_arg1;
- };
-
- template <class ThisType, class ArgType1, class ArgType2>
- class SmartMemberConnection2 : public SmartConnectionBase
- {
- public:
- typedef void (ThisType::*CbType)(IConnection* connection,
- void* event_info, ArgType1 *arg1,
- ArgType2* arg2);
-
- SmartMemberConnection2(const std::string& name,
- CbType callback,
- ThisType* callee,
- ArgType1* arg1,
- ArgType2* arg2,
- EvasObjectShared* object) :
- SmartConnectionBase(name, object),
- m_callback(callback),
- m_callee(callee),
- m_arg1(arg1),
- m_arg2(arg2)
- {
- }
-
- virtual ~SmartMemberConnection2()
- {
- }
-
- virtual void Call(void* event_info)
- {
- (m_callee->*m_callback)(this, event_info, m_arg1, m_arg2);
- }
-
- private:
- CbType m_callback;
- ThisType* m_callee;
- ArgType1* m_arg1;
- ArgType2* m_arg2;
- };
-
- class EvasConnectionBase : public IConnection
- {
- public:
- EvasConnectionBase(Evas_Callback_Type type,
- EvasObjectShared* object);
-
- virtual void ConnectPrv();
- virtual void DisconnectPrv();
-
- Evas_Callback_Type m_callbackType;
- };
-
- template <class ArgType1>
- class EvasConnection1 : public EvasConnectionBase
- {
- public:
- typedef void (*CbType)(IConnection* connection, void* event_info,
- ArgType1 *arg1);
-
- EvasConnection1(Evas_Callback_Type type,
- CbType callback,
- ArgType1* arg1,
- EvasObjectShared* object) :
- EvasConnectionBase(type, object),
- m_callback(callback),
- m_arg1(arg1)
- {
- }
-
- virtual ~EvasConnection1()
- {
- }
-
- virtual void Call(void* event_info)
- {
- m_callback(this, event_info, m_arg1);
- }
-
- private:
- CbType m_callback;
- ArgType1* m_arg1;
- };
-
- template <class ArgType1, class ArgType2>
- class EvasConnection2 : public EvasConnectionBase
- {
- public:
- typedef void (*CbType)(IConnection* connection, void* event_info,
- ArgType1 *arg1, ArgType2 *arg2);
-
- EvasConnection2(Evas_Callback_Type type,
- CbType callback,
- ArgType1* arg1,
- ArgType2* arg2,
- EvasObjectShared* object) :
- EvasConnectionBase(type, object),
- m_callback(callback),
- m_arg1(arg1),
- m_arg2(arg2)
- {
- }
-
- virtual ~EvasConnection2()
- {
- }
-
- virtual void Call(void* event_info)
- {
- m_callback(this, event_info, m_arg1, m_arg2);
- }
-
- private:
- CbType m_callback;
- ArgType1* m_arg1;
- ArgType2* m_arg2;
- };
-
- template <class ThisType, class ArgType1>
- class EvasMemberConnection1 : public EvasConnectionBase
- {
- public:
- typedef void (ThisType::*CbType)(IConnection* connection,
- void* event_info, ArgType1 *arg1);
-
- EvasMemberConnection1(Evas_Callback_Type type,
- CbType callback,
- ThisType* callee,
- ArgType1* arg1,
- EvasObjectShared* object) :
- EvasConnectionBase(type, object),
- m_callback(callback),
- m_callee(callee),
- m_arg1(arg1)
- {
- }
-
- virtual ~EvasMemberConnection1()
- {
- }
-
- virtual void Call(void* event_info)
- {
- (m_callee->*m_callback)(this, event_info, m_arg1);
- }
-
- private:
- CbType m_callback;
- ThisType* m_callee;
- ArgType1* m_arg1;
- };
-
- template <class ThisType, class ArgType1, class ArgType2>
- class EvasMemberConnection2 : public EvasConnectionBase
- {
- public:
- typedef void (ThisType::*CbType)(IConnection* connection,
- void* event_info, ArgType1* arg1,
- ArgType2* arg2);
-
- EvasMemberConnection2(Evas_Callback_Type type,
- CbType callback,
- ThisType* callee,
- ArgType1* arg1,
- ArgType2* arg2,
- EvasObjectShared* object) :
- EvasConnectionBase(type, object),
- m_callback(callback),
- m_callee(callee),
- m_arg1(arg1),
- m_arg2(arg2)
- {
- }
-
- virtual ~EvasMemberConnection2()
- {
- }
-
- virtual void Call(void* event_info)
- {
- (m_callee->*m_callback)(this, event_info, m_arg1, m_arg2);
- }
-
- private:
- CbType m_callback;
- ThisType* m_callee;
- ArgType1* m_arg1;
- ArgType2* m_arg2;
- };
-
- EvasObjectShared();
- explicit EvasObjectShared(Evas_Object* object);
- void SetObject(Evas_Object* object);
- ~EvasObjectShared();
-
- template<typename ... Args>
- IConnection* ConnectSmartCallback(const char* callbackName,
- typename SmartConnection<Args ...>::CbType callback,
- Args ... args)
- {
- Assert(m_object);
- Assert(callbackName);
- Assert(callback);
- IConnection* connection = new SmartConnection<Args ...>(
- callbackName,
- callback,
- this,
- args ...);
- m_connections.insert(connection);
- connection->ConnectPrv();
- return connection;
- }
-
- template <class ThisType, class ArgType1, class ArgType2>
- IConnection* ConnectMemberSmartCallback(
- const char* callbackName,
- typename SmartMemberConnection2<ThisType, ArgType1,
- ArgType2>::CbType callback,
- ThisType* callee,
- ArgType1* arg1,
- ArgType2* arg2)
- {
- Assert(m_object);
- Assert(callee);
- Assert(callbackName);
- Assert(callback);
- IConnection* connection =
- new SmartMemberConnection2<ThisType, ArgType1, ArgType2>(
- callbackName,
- callback,
- callee,
- arg1,
- arg2,
- this);
- m_connections.insert(connection);
- connection->ConnectPrv();
- return connection;
- }
-
- template <class ThisType, class ArgType1>
- IConnection* ConnectMemberSmartCallback(
- const char* callbackName,
- typename SmartMemberConnection1<ThisType,
- ArgType1>::CbType callback,
- ThisType* callee,
- ArgType1* arg1)
- {
- Assert(m_object);
- Assert(callee);
- Assert(callbackName);
- Assert(callback);
- IConnection* connection =
- new SmartMemberConnection1<ThisType, ArgType1>(callbackName,
- callback,
- callee,
- arg1,
- this);
- m_connections.insert(connection);
- connection->ConnectPrv();
- return connection;
- }
-
- template <class ArgType1, class ArgType2>
- IConnection* ConnectEvasCallback(Evas_Callback_Type callbackType,
- typename EvasConnection2<ArgType1, ArgType2>::CbType callback,
- ArgType1* arg1,
- ArgType2* arg2)
- {
- Assert(m_object);
- Assert(callbackType);
- Assert(callback);
- IConnection* connection = new EvasConnection2<ArgType1, ArgType2>(
- callbackType,
- callback,
- arg1,
- arg2,
- this);
- m_connections.insert(connection);
- connection->ConnectPrv();
- return connection;
- }
-
- template <class ArgType1>
- IConnection* ConnectEvasCallback(Evas_Callback_Type callbackType,
- typename EvasConnection1<ArgType1>::CbType callback,
- ArgType1* arg1)
- {
- Assert(m_object);
- Assert(callbackType);
- Assert(callback);
- IConnection* connection = new EvasConnection1<ArgType1>(
- callbackType,
- callback,
- arg1,
- this);
- m_connections.insert(connection);
- connection->ConnectPrv();
- return connection;
- }
-
- template <class ThisType, class ArgType1, class ArgType2>
- IConnection* ConnectMemberEvasCallback(
- Evas_Callback_Type callbackType,
- typename EvasMemberConnection2<ThisType, ArgType1,
- ArgType2>::CbType callback,
- ThisType* callee,
- ArgType1* arg1,
- ArgType2* arg2)
- {
- Assert(m_object);
- Assert(callee);
- Assert(callbackType);
- Assert(callback);
- IConnection* connection =
- new EvasMemberConnection2<ThisType, ArgType1, ArgType2>(
- callbackType,
- callback,
- callee,
- arg1,
- arg2,
- this);
- m_connections.insert(connection);
- connection->ConnectPrv();
- return connection;
- }
-
- template <class ThisType, class ArgType1>
- IConnection* ConnectMemberEvasCallback(
- Evas_Callback_Type callbackType,
- typename EvasMemberConnection1<ThisType,
- ArgType1>::CbType callback,
- ThisType* callee,
- ArgType1* arg1)
- {
- Assert(m_object);
- Assert(callee);
- Assert(callbackType);
- Assert(callback);
- IConnection* connection =
- new EvasMemberConnection1<ThisType, ArgType1>(callbackType,
- callback,
- callee,
- arg1,
- this);
- m_connections.insert(connection);
- connection->ConnectPrv();
- return connection;
- }
-
- bool DisconnectCallback(IConnection* connection);
- void DisconnectAll();
-
- static void StaticOnDelEvent(void* data,
- Evas* /*e*/,
- Evas_Object* /*o*/,
- void* /*ev*/);
-
- IConnectionsSet m_connections;
- Evas_Object* m_object;
- };
-
- public:
- EvasObject();
- explicit EvasObject(Evas_Object* object);
- EvasObject(const EvasObject& other);
- ~EvasObject();
-
- EvasObject& operator=(const EvasObject& other);
- EvasObject* operator=(Evas_Object* object);
-
- operator Evas_Object *();
-
- bool IsValid() const
- {
- Assert(m_object);
- return m_object->GetObject() != NULL;
- }
-
- bool DisconnectCallback(IConnection* connection);
- void DisconnectAll();
-
- template <class ... Args>
- IConnection* ConnectSmartCallback(
- const char* callbackName,
- typename EvasObjectShared::SmartConnection<Args ...>::CbType
- callback,
- Args ... args)
- {
- Assert(m_object);
- return m_object->ConnectSmartCallback(callbackName, callback, args ...);
- }
-
- template <class ThisType, class ArgType1, class ArgType2>
- IConnection* ConnectMemberSmartCallback(
- const char* callbackName,
- typename EvasObjectShared::SmartMemberConnection2<ThisType,
- ArgType1,
- ArgType2>::CbType
- callback,
- ThisType* callee,
- ArgType1* arg1,
- ArgType2* arg2)
- {
- Assert(m_object);
- Assert(callee);
- Assert(callback);
- return m_object->ConnectMemberSmartCallback(callbackName,
- callback,
- callee,
- arg1,
- arg2);
- }
-
- template <class ThisType, class ArgType1>
- IConnection* ConnectMemberSmartCallback(
- const char* callbackName,
- typename EvasObjectShared::SmartMemberConnection1<ThisType,
- ArgType1>::CbType
- callback,
- ThisType* callee,
- ArgType1* arg1)
- {
- Assert(m_object);
- Assert(callee);
- Assert(callback);
- return m_object->ConnectMemberSmartCallback(callbackName,
- callback,
- callee,
- arg1);
- }
-
- template <class ArgType1, class ArgType2>
- IConnection* ConnectEvasCallback(
- Evas_Callback_Type callbackType,
- typename EvasObjectShared::EvasConnection1<ArgType1>::CbType
- callback,
- ArgType1* arg1,
- ArgType2* arg2)
- {
- Assert(m_object);
- return m_object->ConnectEvasCallback(callbackType, callback, arg1, arg2);
- }
-
- template <class ArgType1>
- IConnection* ConnectEvasCallback(
- Evas_Callback_Type callbackType,
- typename EvasObjectShared::EvasConnection1<ArgType1>::CbType
- callback,
- ArgType1* arg1)
- {
- Assert(m_object);
- return m_object->ConnectEvasCallback(callbackType, callback, arg1);
- }
-
- template <class ThisType, class ArgType1>
- IConnection* ConnectMemberEvasCallback(
- Evas_Callback_Type callbackType,
- typename EvasObjectShared::EvasMemberConnection1<ThisType,
- ArgType1>::CbType
- callback,
- ThisType* callee,
- ArgType1* arg1)
- {
- Assert(m_object);
- Assert(callee);
- Assert(callback);
- return m_object->ConnectMemberEvasCallback(callbackType,
- callback,
- callee,
- arg1);
- }
-
- template <class ThisType, class ArgType1, class ArgType2>
- IConnection* ConnectMemberEvasCallback(
- Evas_Callback_Type callbackType,
- typename EvasObjectShared::EvasMemberConnection2<ThisType, ArgType1,
- ArgType2>::CbType
- callback,
- ThisType* callee,
- ArgType1* arg1,
- ArgType2* arg2)
- {
- Assert(m_object);
- Assert(callee);
- Assert(callback);
- return m_object->ConnectMemberEvasCallback(callbackType,
- callback,
- callee,
- arg1,
- arg2);
- }
-
- private:
- EvasObjectSharedPtr m_object;
-};
-
-#endif //WRT_SRC_DOMAIN_EFL_EVAS_OBJECT_H
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file regular_browser_setting.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Implementation of final browser setting class.
- */
-
-#include <regular_browser_setting.h>
-#include <string>
-
-#include <framework_ewebkit.h>
-#include <Elementary_webview.h>
-#include "user_agent_profile.h"
-
-RegularBrowserSetting::RegularBrowserSetting(Evas_Object *elmWebview) :
- BaseBrowserSetting(elmWebview)
-{
- passUserAgentToWebkit();
-}
-
-void RegularBrowserSetting::passUserAgentToWebkit()
-{
- // Custom User Agent
- // WR-4200: (deviceVendor-model/version)
- // layoutEngine/version WRTVendor-name/version
- Evas_Object *webview = elm_webview_webkit_get(m_elmWebview);
- std::string userAgent;
- userAgent += "(Samsung-TIZEN/1.0)";
- userAgent += " WebKit";
- //userAgent += "/TODO_no_API_to_get_this";
- userAgent += " Samsung-WRT/";
- userAgent += WRT_ENGINE_VERSION;
- ewk_view_setting_user_agent_set(webview, userAgent.c_str());
-
- std::string xWapProfileDiff = UserAgentProfile::GetProfileDiff();
-
- //FIXME couldn't find X_WAP_PROFILE_URL (j.osmanski@samsung.com)
- //ewk_view_setting_custom_header_add(webview,
- // "x-Wap-Profile", X_WAP_PROFILE_URL);
- //ewk_view_setting_custom_header_add(webview,
- // "x-Wap-Profile-Diff",
- // xWapProfileDiff.c_str());
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file regular_browser_setting.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Declaration of final browser setting class.
- */
-
-#ifndef WRT_SRC_DOMAIN_EFL_REGULAR_BROWSER_SETTING_H_
-#define WRT_SRC_DOMAIN_EFL_REGULAR_BROWSER_SETTING_H_
-
-#include <framework_efl.h>
-#include <base_browser_setting.h>
-
-
-class RegularBrowserSetting : public BaseBrowserSetting
-{
- public:
- explicit RegularBrowserSetting(Evas_Object *elmWebview);
- virtual void passUserAgentToWebkit();
-};
-
-#endif /* WRT_SRC_DOMAIN_EFL_REGULAR_BROWSER_SETTING_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file roaming_agent.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @author Lukasz Marek (l.marek@samsung.com)
- * @version 1.0
- * @brief roaming agent
- */
-
-#include "roaming_agent.h"
-#include <PopupInvoker.h>
-#include <vconf.h>
-#include <ewk_network.h>
-#include <global_logic.h>
-#include <dpl/singleton_impl.h>
-
-IMPLEMENT_SINGLETON(RoamingAgent)
-
-namespace {
-const char* CONNECTING_ROAMING_NETWORK = "Connecting to Roaming Network";
-const char* CONNECTING_HOME_NETWORK = "Connecting to Home Network";
-const char* CONNECTION_WARNING =
- "Your terminal is going online.<br>"
- "Be aware that data charges might apply!<br>"
- "Do you want to continue?";
-
-const char* KEEP_CONNECTION_WARNING =
- "Notwork type changed.<br>"
- "Do you want to keep active connections?";
-} // anonymous
-
-RoamingAgent::RoamingAgent()
-{
- if (!IsControlEnabled()) {
- return;
- }
- //setting say if we are using roaming network or home network
- int result = 0;
- if (vconf_get_int(VCONFKEY_TELEPHONY_SVC_ROAM, &result) != 0) {
- LogError("Cannot get current roaming status");
- } else {
- bool type = (result == VCONFKEY_TELEPHONY_SVC_ROAM_ON);
- m_networkType = type ? ROAMING : HOME;
- LogInfo("Network type is " << (type ? "ROAMING" : "HOME"));
- }
- //setting says if roaming is enabled at all
- if (vconf_get_bool(VCONFKEY_SETAPPL_STATE_DATA_ROAMING_BOOL,
- &result) == -1) {
- LogError("Cannot get current network setting");
- } else {
- m_roamingNetworkEnabled = result;
- LogInfo("Roaming is " << (result ? "ENABLED" : "DISABLED"));
- }
-
- GlobalModel *globalModel =
- GlobalLogicSingleton::Instance().GetGlobalModel();
-
- //read current home network access setting
- SaveNetworkAccessMode(HOME, globalModel->HomeNetworkAccess.Get());
- //read current roaming network access setting
- SaveNetworkAccessMode(ROAMING, globalModel->RoamingNetworkAccess.Get());
-
- LogInfo("Roaming network setting " << m_networkOption.Option(ROAMING));
- LogInfo("Home network network setting " << m_networkOption.Option(HOME));
-
- globalModel->HomeNetworkAccess.AddListener(DPL::MakeDelegate(this,
- &RoamingAgent
- ::
- OnHomeNetworkAccessModeChanged));
- globalModel->RoamingNetworkAccess.AddListener(DPL::MakeDelegate(this,
- &
- RoamingAgent
- ::
- OnRoamingNetworkAccessModeChanged));
- DPL::Event::EventDeliverySystem::AddListener<
- DPL::Event::EventMessages::RoamingChanged>(this);
- DPL::Event::EventDeliverySystem::AddListener<
- DPL::Event::EventMessages::NetworkTypeChanged>(this);
- if (vconf_notify_key_changed(
- VCONFKEY_NETWORK_WIFI_STATE,
- vConfChagedCallback, this) < 0)
- {
- LogError("Cannot add vconf callback [" <<
- VCONFKEY_NETWORK_WIFI_STATE << "]");
- }
-}
-
-RoamingAgent::~RoamingAgent()
-{
- if (!IsControlEnabled()) {
- return;
- }
-
- GlobalModel *globalModel =
- GlobalLogicSingleton::Instance().GetGlobalModel();
- globalModel->HomeNetworkAccess.RemoveListener(DPL::MakeDelegate(this,
- &
- RoamingAgent
- ::
- OnHomeNetworkAccessModeChanged));
- globalModel->RoamingNetworkAccess.RemoveListener(DPL::MakeDelegate(this,
- &
- RoamingAgent
- ::
- OnRoamingNetworkAccessModeChanged));
-
- DPL::Event::EventDeliverySystem::RemoveListener<
- DPL::Event::EventMessages::RoamingChanged>(this);
- DPL::Event::EventDeliverySystem::RemoveListener<
- DPL::Event::EventMessages::NetworkTypeChanged>(this);
-}
-
-bool RoamingAgent::IsControlEnabled()
-{
- static const char* var = getenv("WRT_ROAMING_CONTROL_ENABLED");
- static const bool ret = (var != NULL ? 0 == !strcmp("0", var) : true);
- LogDebug("control enabled status " << ret);
- return ret;
-}
-
-bool RoamingAgent::CheckAccess()
-{
- if (!IsControlEnabled()) {
- return true;
- }
-
- //Don't allow to use network when global phone setting doesn't allow it
- if (m_networkType == ROAMING && !m_roamingNetworkEnabled) {
- LogInfo("global phone setting turned off roaming usage");
- return false;
- }
-
- return AskUser(CONNECTION_WARNING);
-}
-
-bool RoamingAgent::AskUser(const std::string &label)
-{
- // If current network uses wifi, pass the roaming check
- int wifiState = VCONFKEY_NETWORK_WIFI_OFF;
- if (vconf_get_int(VCONFKEY_NETWORK_WIFI_STATE, &wifiState) < 0) {
- LogError("Fail to get wifi state");
- } else {
- if (VCONFKEY_NETWORK_WIFI_CONNECTED == wifiState) {
- LogInfo("Current network uses WIFI");
- return true;
- }
- }
-
- NetworkOptionType &option = m_networkOption.Option(m_networkType);
-
- switch (option) {
- case NEVER_CONNECT:
- LogInfo("Network option: never connect");
- return false;
- case CONNECT_AUTO:
- LogInfo("Network option: connect automatically");
- return true;
- case ALWAYS_ASK:
- LogInfo("Network option: always ask");
- if (!(m_userAnswer.Answer(m_networkType).IsNull())) {
- return *m_userAnswer.Answer(m_networkType);
- }
- //create popup and ask user
- {
- std::string title(m_networkType == ROAMING ?
- CONNECTING_ROAMING_NETWORK :
- CONNECTING_HOME_NETWORK);
-
- bool response = PopupInvoker().askYesNo(title, label);
-
- LogDebug("Answer: " << response);
-
- m_userAnswer.Answer(m_networkType) = response;
- return response;
- }
- }
- return false;
-}
-
-void RoamingAgent::Disconnect()
-{
- LogInfo("disconnecting connections");
- ewk_network_session_requests_cancel();
-}
-
-void RoamingAgent::HandleDisconnection()
-{
- if (!AskUser(KEEP_CONNECTION_WARNING)) {
- Disconnect();
- }
-}
-
-void RoamingAgent::OnEventReceived(
- const DPL::Event::EventMessages::RoamingChanged &event)
-{
- if (!IsControlEnabled()) {
- return;
- }
- LogInfo("Network is now " << (event.GetEnabled() ? "ENABLED" : "DISABLED"));
- if (m_roamingNetworkEnabled != event.GetEnabled()) {
- m_roamingNetworkEnabled = event.GetEnabled();
- HandleDisconnection();
- }
-}
-
-void RoamingAgent::OnEventReceived(
- const DPL::Event::EventMessages::NetworkTypeChanged &event)
-{
- if (!IsControlEnabled()) {
- return;
- }
- NetworkType temp = event.IsRoaming() ? ROAMING : HOME;
- if (temp != m_networkType) {
- m_networkType = temp;
- LogInfo("Network type changed into " <<
- (event.IsHomeNetwork() ? "Home network" : "Roaming"));
- HandleDisconnection();
- }
-}
-
-void RoamingAgent::NetworkAccessModeChanged(NetworkType networkType,
- GlobalModel::NetworkAccessMode mode)
-{
- if (!IsControlEnabled()) {
- return;
- }
- SaveNetworkAccessMode(networkType, mode);
- HandleDisconnection();
-}
-
-void RoamingAgent::vConfChagedCallback(keynode_t *keyNode, void *data)
-{
- LogInfo("RoamingAgent::vConfChagedCallback ");
- char *key = vconf_keynode_get_name(keyNode);
-
- if (NULL == key) {
- LogWarning("vconf key is null.");
- return;
- }
- std::string keyString = key;
- // wifi setting
- if (VCONFKEY_NETWORK_WIFI_STATE == keyString) {
- RoamingAgent *roam = static_cast<RoamingAgent *>(data);
- roam->HandleDisconnection();
- }
- return;
-}
-
-void RoamingAgent::SaveNetworkAccessMode(NetworkType networkType,
- GlobalModel::NetworkAccessMode mode)
-{
- LogDebug("SaveNetworkAccessMode");
- switch (mode) {
- case GlobalModel::NEVER_CONNECT:
- m_networkOption.Option(networkType) = NEVER_CONNECT;
- break;
- case GlobalModel::CONNECT_AUTOMATICALLY:
- m_networkOption.Option(networkType) = CONNECT_AUTO;
- break;
- case GlobalModel::ALWAYS_ASK:
- m_networkOption.Option(networkType) = ALWAYS_ASK;
- break;
- default:
- LogWarning("Invalid network access, using default");
- m_networkOption.Option(networkType) = ALWAYS_ASK;
- break;
- }
-}
-
-void RoamingAgent::OnHomeNetworkAccessModeChanged(
- const DPL::Event::PropertyEvent<GlobalModel::NetworkAccessMode> &event)
-{
- LogInfo("home network access type: " << event.value);
- NetworkAccessModeChanged(HOME, event.value);
-}
-
-void RoamingAgent::OnRoamingNetworkAccessModeChanged(
- const DPL::Event::PropertyEvent<GlobalModel::NetworkAccessMode> &event)
-{
- LogInfo("roaming network access type: " << event.value);
- NetworkAccessModeChanged(ROAMING, event.value);
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file roaming_agent.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief roaming agent
- */
-
-#ifndef ROAMING_AGENT_H_
-#define ROAMING_AGENT_H_
-
-#include <string>
-#include <dpl/event/event_delivery.h>
-#include <dpl/event/event_delivery_messages.h>
-#include <dpl/event/event_listener.h>
-#include <widget_model.h>
-#include <dpl/optional_typedefs.h>
-#include <global_model.h>
-
-class RoamingAgent :
- private DPL::Event::EventListener<DPL::Event::EventMessages::RoamingChanged>,
- private DPL::Event::EventListener<DPL::Event::EventMessages::NetworkTypeChanged>
-{
- public:
- bool CheckAccess();
- bool IsControlEnabled();
- bool IsRoamingOn() const
- {
- return m_networkType == ROAMING;
- }
-
- private:
- enum NetworkType {ROAMING, HOME};
- enum NetworkOptionType {NEVER_CONNECT, ALWAYS_ASK, CONNECT_AUTO};
-
- NetworkType m_networkType;
- bool m_roamingNetworkEnabled;
-
- class NetworkOption
- {
- public:
- NetworkOption() :
- m_roaming(ALWAYS_ASK),
- m_home(ALWAYS_ASK)
- {
- }
-
- NetworkOption(NetworkOptionType aroaming,
- NetworkOptionType ahome) :
- m_roaming(aroaming),
- m_home(ahome)
- {
- }
-
- ~NetworkOption()
- {
- }
-
- NetworkOptionType &Option(NetworkType astate)
- {
- return astate == ROAMING ? m_roaming : m_home;
- }
-
- private:
- NetworkOptionType m_roaming;
- NetworkOptionType m_home;
- };
-
- class UserAnswer
- {
- public:
- UserAnswer() :
- m_roaming(DPL::OptionalBool::Null),
- m_home(DPL::OptionalBool::Null)
- {
- }
-
- UserAnswer(bool aroam,
- bool ahome) :
- m_roaming(aroam),
- m_home(ahome)
- {
- }
-
- ~UserAnswer()
- {
- }
-
- DPL::OptionalBool &Answer(NetworkType astate)
- {
- return astate == ROAMING ? m_roaming : m_home;
- }
-
- void ResetAnswer(NetworkType astate)
- {
- DPL::OptionalBool &answer = astate == ROAMING ? m_roaming : m_home;
- answer = DPL::OptionalBool::Null;
- }
-
- private:
- DPL::OptionalBool m_roaming;
- DPL::OptionalBool m_home;
- };
-
- NetworkOption m_networkOption;
-
- UserAnswer m_userAnswer;
-
- RoamingAgent();
- virtual ~RoamingAgent();
-
- bool AskUser(const std::string &label);
- void Disconnect();
- void HandleDisconnection();
- void SaveNetworkAccessMode(NetworkType networkType,
- GlobalModel::NetworkAccessMode mode);
- void NetworkAccessModeChanged(NetworkType networkType,
- GlobalModel::NetworkAccessMode mode);
- static void vConfChagedCallback(keynode_t *keyNode, void *userParam);
- virtual void OnEventReceived(
- const DPL::Event::EventMessages::RoamingChanged &event);
- virtual void OnEventReceived(
- const DPL::Event::EventMessages::NetworkTypeChanged &event);
- virtual void OnHomeNetworkAccessModeChanged(
- const DPL::Event::PropertyEvent<GlobalModel::NetworkAccessMode> &event);
- virtual void OnRoamingNetworkAccessModeChanged(
- const DPL::Event::PropertyEvent<GlobalModel::NetworkAccessMode> &event);
-
- friend class DPL::Singleton<RoamingAgent>;
-};
-
-typedef DPL::Singleton<RoamingAgent> RoamingAgentSingleton;
-
-#endif /* ROAMING_AGENT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file vconf_browser_setting.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Implementation of temporary, vconf based, browser setting class.
- */
-
-#include <vconf_browser_setting.h>
-
-#include <vconf.h>
-#include <vconf-keys.h>
-
-#include <string>
-#include <vector>
-#include <dpl/log/log.h>
-#include <framework_ewebkit.h>
-#include <Elementary_webview.h>
-#include <dpl/wrt-dao-rw/global_dao.h>
-#include <widget_view.h>
-
-namespace {
-// TODO: remove this after ua is fixed...
-const std::string SETTING_VCONF_PREFIX = "db/browsersetting/";
-const std::string USERAGENT_KEY = SETTING_VCONF_PREFIX + "UserAgent";
-
-const std::vector<std::string> BROWSER_SETTINGS = {
- USERAGENT_KEY,
-};
-
-const char FLASH_MIME_TYPE[] = "application/x-shockwave-flash";
-
-} // end of namespace anonymous
-
-VconfBrowserSetting::VconfBrowserSetting(Evas_Object *elmWebview,
- WidgetViewDataStruct *viewData) :
- BaseBrowserSetting(elmWebview),
- m_viewData(viewData)
-{
- //fixme unregister callbacks
- LogInfo("Starting VConf browser setting");
- passUserAgentToWebkit();
-}
-
-void VconfBrowserSetting::passUserAgentToWebkit()
-{
- std::for_each(BROWSER_SETTINGS.begin(), BROWSER_SETTINGS.end(),
- [this](const std::string& key)
- {
- passSettingToElmWebview(key);
- });
-}
-
-void VconfBrowserSetting::passSettingToElmWebview(const std::string& key)
-{
- using namespace WrtDB;
- LogDebug("Get key:: " << key);
-
- Evas_Object *webview = elm_webview_webkit_get(m_elmWebview);
-
- if (key == USERAGENT_KEY) {
- char* vconfValue = vconf_get_str(key.c_str());
- std::string userAgentName;
-
- if (!vconfValue) {
- userAgentName = "Tizen";
- } else {
- userAgentName = vconfValue;
- }
-
- DPL::String value =
- GlobalDAO::GetUserAgentValue(DPL::FromUTF8String(userAgentName));
- std::string userAgent = DPL::ToUTF8String(value);
- if (!userAgent.empty()) {
- if (!ewk_view_setting_user_agent_set(webview, userAgent.c_str())) {
- LogError("Cannot set user agent [" << userAgentName << "]");
- return;
- }
- }
- LogDebug("UA:[" << userAgentName << "] UA string:[" << userAgent);
- free(vconfValue);
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file vconf_browser_setting.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Declaration of temporary, vconf based, browser setting class.
- */
-
-#ifndef WRT_SRC_DOMAIN_EFL_VCONF_BROWSER_SETTING_H_
-#define WRT_SRC_DOMAIN_EFL_VCONF_BROWSER_SETTING_H_
-
-#include <framework_efl.h>
-#include <base_browser_setting.h>
-
-struct WidgetViewDataStruct;
-
-class VconfBrowserSetting : public BaseBrowserSetting
-{
- public:
- explicit VconfBrowserSetting(Evas_Object *elmWebview,
- WidgetViewDataStruct *viewData);
-
- virtual void passUserAgentToWebkit();
- virtual void passSettingToElmWebview(const std::string& key);
- private:
- WidgetViewDataStruct *m_viewData;
-};
-
-#endif /* WRT_SRC_DOMAIN_EFL_VCONF_BROWSER_SETTING_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This file have been implemented in compliance with W3C WARP SPEC.
- * but there are some patent issue between W3C WARP SPEC and APPLE.
- * so if you want to use this file, refer to the README file in root directory
- */
-/**
- * @file view_logic.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @author Koeun Choi (koeun.choi@samsung.com)
- * @version 1.0
- * @brief Implementation file for view logic for EFL
- */
-
-#include <view_logic.h>
-#include <list>
-#include <ostream>
-#include <pcrecpp.h>
-#include <ewk_view.h>
-#include <Elementary_webview.h>
-
-#include <plugin_api.h>
-#include <plugin_logic.h>
-#include <global_logic.h>
-#include <user_callback_controller.h>
-#include <window_data.h>
-#include <dnet.h>
-#include <ace_client.h>
-#include <child_protection_agent.h>
-#include "attribute_facade.h"
-#include "user_agent_profile.h"
-
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-#include <dpl/wrt-dao-ro/global_dao_read_only.h>
-#include <dpl/localization/w3c_file_localization.h>
-
-#include <view_logic_keys_support.h>
-#include <view_logic_security_support.h>
-#include <view_logic_scheme_support.h>
-#include <view_logic_uri_support.h>
-#include <view_logic_apps_support.h>
-#include <view_logic_storage_support.h>
-#include <view_logic_password_support.h>
-#include <dpl/singleton_safe_impl.h>
-
-IMPLEMENT_SAFE_SINGLETON(ViewLogic)
-//TODO to be removed (bin headers should not be used here)
-#include <wrt-client.h>
-#include <api_callbacks_translate.h>
-
-namespace {
-// ewk callback
-const char *EVAS_SMART_CALLBACK_STARTED = "load,started";
-const char *EVAS_SMART_CALLBACK_PROGRESS = "load,progress";
-const char *EVAS_SMART_CALLBACK_FINISHED = "load,finished";
-const char *EVAS_SMART_CALLBACK_URI_CHANGED = "uri,changed";
-const char *EVAS_SMART_CALLBACK_LINK_HOVER_IN = "link,hover,in";
-const char *EVAS_SMART_CALLBACK_LINK_HOVER_OUT = "link,hover,out";
-const char *EVAS_SMART_CALLBACK_WEBVIEW_RESIZE = "webView,resize";
-const char *EVAS_SMART_CALLBACK_CREATE_WEBVIEW = "create,webview";
-const char *EVAS_SMART_CALLBACK_WINDOW_CLOSE = "window,close";
-const char *EVAS_SMART_CALLBACK_SHOULD_ALLOW_OPEN = "should,allow,open";
-const char *EVAS_SMART_CALLBACK_FRAME_CREATED = "frame,created";
-const char *EVAS_SMART_CALLBACK_ONE_SINGLE_TAP = "one,single,tap";
-const char *EVAS_SMART_CALLBACK_DOWNLOAD_REQUEST = "download,request";
-const char *EVAS_SMART_CALLBACK_HTML5_VIDEO_REQUEST = "html5video,request";
-// ewk frame callback
-const char *EVAS_SMART_CALLBACK_CONTENT_SIZE_CHANGED = "contents,size,changed";
-const char *EVAS_SMART_CALLBACK_RESOURCE_REQUEST_WILL_SEND
- = "resource,request,willsend";
-const char *EVAS_SMART_CALLBACK_SUBMIT_CLICKED = "submit,clicked";
-// elm-webview callback
-const char *EVAS_SMART_CALLBACK_PANNING_STARTED = "pan,started";
-const char *EVAS_SMART_CALLBACK_PANNING_FINISHED = "pan,finished";
-// common callback
-const char *EVAS_SMART_CALLBACK_CLICKED = "clicked";
-
-// window signal callback
-const char *EDJE_SHOW_BACKWARD_SIGNAL = "show,backward,signal";
-//const char *EDJE_HIDE_BACKWARD_SIGNAL = "hide,backward,signal";
-
-// view-mode - only support fullscreen & maximized
-//const std::string VIEWMODE_TYPE_WINDOWED = "windowed";
-//const std::string VIEWMODE_TYPE_FLOATING = "floating";
-const std::string VIEWMODE_TYPE_FULLSCREEN = "fullscreen";
-const std::string VIEWMODE_TYPE_MAXIMIZED = "maximized";
-//const std::string VIEWMODE_TYPE_MINIMIZED = "minimized";
-
-// const for threshold
-const double PROGRESS_STOP_LOADING_PERCENT = 0.7f;
-const int PROGRESS_STOP_LOADING_TIME_THRESHOLD = 3;
-const int SUSPEND_WAIT_TIME_THRESHOLD = 5;
-
-// Only scheme and path parts are required.
-const char* PATTERN_URI_CHANGE = "^(([^:/\\?#]+)://[^\\?#]*)";
-
-// for flash plugin on
-const char FLASH_MIME_TYPE[] = "application/x-shockwave-flash";
-} // namespace anonymous
-
-ViewLogic::ViewLogic() :
- m_widgetView(NULL),
- m_appsSupport(new ViewModule::AppsSupport())
-{
-#ifndef USE_DNET
- NetSingleton::Instance().RegisterIpChangedCallback();
-#endif
-}
-
-ViewLogic::~ViewLogic()
-{
-#ifdef USE_DNET
- if (NetSingleton::Instance().IsConnected()) {
- LogInfo("[NET] connection closing");
- NetSingleton::Instance().Close();
- }
-#else
- NetSingleton::Instance().DeregisterIpChangedCallback();
-#endif
-}
-
-void ViewLogic::initialize()
-{
- LogInfo("ViewLogic Initialization....");
-
-#ifdef WEBKIT_SOUP_CACHE
- LogDebug("Initializing WebKit SOUP cache...");
- // If cache should be shared between more than one instance of WebKit
- // then 2nd argument should be set to EINA_TRUE.
- if (EINA_FALSE == ewk_cache_init(WEBKIT_SOUP_CACHE_DIR, EINA_FALSE)) {
- LogError("Couldn't initialize WebKit cache");
- }
- if (EINA_FALSE == ewk_cache_load()) {
- LogError("Couldn't load WebKit cache");
- }
-#endif
-}
-
-void ViewLogic::terminate()
-{
- LogInfo("ViewLogic termination....");
-
- if (m_widgetView) {
- WidgetModel *widgetModel = m_widgetView->getWidgetModel();
- hideWidget(widgetModel);
- widgetModel->State.Set(WidgetState_Stopped);
- }
-
-#ifdef WEBKIT_SOUP_CACHE
- LogDebug("Deinitializing WebKit SOUP cache...");
- if (EINA_FALSE == ewk_cache_flush()) {
- LogError("Couldn't flush WebKit cache");
- }
- if (EINA_FALSE == ewk_cache_dump()) {
- LogError("Couldn't dump WebKit cache");
- }
-#endif
-}
-
-void ViewLogic::prepareView(WidgetModel* widgetModel,
- const WidgetLaunchStruct& widgetLaunchStruct)
-{
- using namespace WrtDB;
-
- ADD_PROFILING_POINT("PrepareView", "start");
- LogInfo("Launching widget model view..." << widgetModel->Handle.Get());
- // Check for developer errors
- Assert(m_widgetView == NULL);
-
- // Register new widget model in pool
- m_widgetView = new WidgetViewDataStruct(widgetModel, this);
-
- ADD_PROFILING_POINT("CreateWindow", "start");
- unsigned long context =
- *static_cast<unsigned long *>(widgetLaunchStruct.launchContext);
- m_widgetView->m_windowData = new WindowData(context, NULL);
- ADD_PROFILING_POINT("CreateWindow", "stop");
-
- // Register view mode
- setViewMode(m_widgetView);
- // Checking view mode & create title/indicator
- bool indicator = true;
- bool backbutton = false;
- if (widgetModel->Type.Get().appType == APP_TYPE_TIZENWEBAPP) {
- indicator
- = (widgetModel->SettingList.Get().getIndicatorPresence()
- == Indicator_Enable) ? true : false;
- backbutton
- = (widgetModel->SettingList.Get().getBackButtonPresence()
- == BackButton_Enable) ? true : false;
- }
-
- if (m_widgetView->m_viewMode == EWK_VIEW_MODE_MAXIMIZED) {
- std::string name = "";
- if (!(widgetModel->Name.Get().IsNull())) {
- name = DPL::ToUTF8String(*(widgetModel->Name.Get()));
- }
- m_widgetView->m_windowData->setViewModeMaximized(
- name.c_str(), indicator, backbutton);
- } else {
- m_widgetView->m_windowData->setViewModeFullScreen(
- indicator, backbutton);
- }
- setDebugMode(m_widgetView, widgetLaunchStruct);
-
- // Create new webkkit object
- m_widgetView->m_elmWidget = m_widgetView->m_windowData->m_win;
- m_widgetView->m_view = evas_object_evas_get(m_widgetView->m_elmWidget);
-
- m_widgetView->m_widgetHandle = widgetModel->Handle.Get();
-
- // get value of ELM_SCALE
- m_widgetView->m_elmScale = elm_scale_get();
- LogInfo("ELM_SCALE :" << m_widgetView->m_elmScale);
-
- // initialize value
- m_widgetView->m_firstUriChanged = false;
- m_widgetView->m_firstUriLoadFinished = false;
- // create webview and set callback
- createWebview(m_widgetView);
- connectCallbacks(m_widgetView->m_widgetModel, widgetLaunchStruct);
-
- m_widgetView->m_firstPageLoaded = false;
-
- m_appsSupport->initialize(widgetModel);
- ViewModule::StorageSupport::initializeStorage(widgetModel);
-
- ADD_PROFILING_POINT("PrepareView", "stop");
-}
-
-void ViewLogic::showWidget(WidgetModel *widgetModel,
- const WidgetLaunchStruct &widgetLaunchStruct)
-{
- ADD_PROFILING_POINT("ShowWidget", "start");
-
- if (!m_widgetView) {
- POST_USER_CALLBACK(
- new LaunchFinishedCallbackCall(
- widgetLaunchStruct.launchFinishedCallback,
- NULL,
- widgetModel->Handle.Get(),
- CommonError::Unknown,
- NULL,
- widgetLaunchStruct.userParam));
- return;
- }
- WidgetViewDataStruct* widgetView = m_widgetView;
-
-
- widgetView->m_currentUri =
- ViewModule::UriSupport::getUri(
- widgetLaunchStruct.widgetArg,
- widgetModel);
-
- // Set proper window size
- WidgetSize size = widgetModel->PreferredSize.Get();
-
- evas_object_resize(EVAS_ELM_WEBVIEW(widgetView),
- !size.width.IsNull() ? *size.width : 1,
- !size.height.IsNull() ? *size.height : 1);
-
-#if USE_DNET
- if (!NetSingleton::Instance().IsConnected()) {
- LogInfo("[NET] try to open dnet");
- if (NetSingleton::Instance().Open(netOpenRsrcRequestCallback,
- widgetView) == true)
- {
- LogInfo("[NET] REALLY OPEN DNET!!!!");
- } else {
- LogInfo("[NET] do not need to open");
- elm_webview_uri_set(EVAS_ELM_WEBVIEW(widgetView),
- widgetView->m_currentUri.c_str());
- ewk_view_reload(EVAS_WEBVIEW(widgetView));
- widgetView->m_firstPageLoaded = true;
- }
- } else {
- LogInfo("[NET] dnet is already connected : not need to reconnect...");
- elm_webview_uri_set(EVAS_ELM_WEBVIEW(widgetView),
- widgetView->m_currentUri.c_str());
- ewk_view_reload(EVAS_WEBVIEW(widgetView));
- widgetView->m_firstPageLoaded = true;
- }
-#else
- // proxy server setting
- char *proxyAddress = vconf_get_str(VCONFKEY_NETWORK_PROXY);
-
- if ((!proxyAddress) || (strlen(proxyAddress) == 0)
- || (strstr(proxyAddress, "0.0.0.0")))
- {
- LogInfo("proxy address is empty");
- ewk_network_proxy_uri_set(NULL);
- } else {
- LogInfo("proxy address [" << proxyAddress << "]");
- ewk_network_proxy_uri_set(vconf_get_str(VCONFKEY_NETWORK_PROXY));
- }
-
- if (proxyAddress) {
- free(proxyAddress);
- proxyAddress = NULL;
- }
-
- elm_webview_uri_set(EVAS_ELM_WEBVIEW(widgetView),
- widgetView->m_currentUri.c_str());
- ewk_view_reload(EVAS_WEBVIEW(widgetView));
- widgetView->m_firstPageLoaded = true;
-#endif
-
- widgetView->m_windowData->setEvasObjectForLayout(
- EVAS_ELM_WEBVIEW(widgetView));
- evas_object_show(EVAS_ELM_WEBVIEW(widgetView));
- evas_object_show(widgetView->m_elmWidget);
-
- ADD_PROFILING_POINT("ShowWidget", "stop");
-
-}
-
-void ViewLogic::hideWidget(WidgetModel *widgetModel)
-{
- LogInfo("Killing widget model view...");
-
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
- if (!widgetView) {
- LogError("Invalid widget model passed!");
- return;
- }
-
- m_appsSupport->deinitialize();
- ViewModule::StorageSupport::deinitializeStorage(widgetModel);
-
- // Remove webkit callbacks
- disconnectCallbacks(widgetModel);
- FOREACH(it, widgetView->m_evasStructList) {
- disconnectViewCallbacks(widgetView, *it);
- }
-
- // Disable Plugins
- ewk_view_setting_enable_plugins_set(EVAS_WEBVIEW(widgetView), 0);
-
- if (widgetView->imContext != NULL &&
- (ecore_imf_context_input_panel_state_get(widgetView->imContext)
- == ECORE_IMF_INPUT_PANEL_STATE_SHOW))
- {
- ecore_imf_context_input_panel_hide(widgetView->imContext);
- widgetView->imContext = NULL;
- }
-
- LogInfo("Stop session");
- // Unload plugins
- PluginLogicSingleton::Instance().stopSession();
-
- LogInfo("webkit del");
- FOREACH(it, widgetView->m_evasStructList) {
- EvasStruct* evasStruct = *it;
- // remove EvasObject
- evas_object_del(evasStruct->m_elmWebView);
- evas_object_del(evasStruct->m_webView);
- delete evasStruct;
- }
- widgetView->m_evasStructList.clear();
-
- LogInfo("remove widgetView");
- // Erase from known widget models
-
- delete widgetView->m_windowData;
- delete widgetView;
- m_widgetView = NULL;
-
- LogInfo("Widget model view killed.");
-}
-
-void ViewLogic::connectCallbacks(WidgetModel *widgetModel,
- const WidgetLaunchStruct &widgetLaunchStruct)
-{
- Assert(widgetModel != NULL);
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
- Assert(widgetView);
- WidgetLaunchStruct* launchStruct =
- new WidgetLaunchStruct(widgetLaunchStruct);
-
- // key
- m_widgetView->m_eventHandlerDown = ecore_event_handler_add(
- ECORE_EVENT_KEY_DOWN,
- &ViewLogic::keydownEvent,
- widgetView);
- m_widgetView->m_eventHandlerUp = ecore_event_handler_add(
- ECORE_EVENT_KEY_UP,
- &ViewLogic::keyupEvent,
- widgetView);
-
- // add callback to relate window
- if (widgetModel->Type.Get().appType == WrtDB::APP_TYPE_TIZENWEBAPP) {
- if (widgetModel->SettingList.Get().getBackButtonPresence() ==
- BackButton_Enable)
- {
- widgetView->m_windowData->addFloatBackButtonCallback(
- EVAS_SMART_CALLBACK_CLICKED,
- &ViewLogic::backKeyCallback,
- widgetView);
- }
-
- WidgetSettingRotationLock rotationValue =
- widgetModel->SettingList.Get().getRotationValue();
- if (rotationValue == Rotation_Portrait) {
- elm_win_rotation_with_resize_set(widgetView->m_elmWidget, 0);
- } else if (rotationValue == Rotation_Landscape) {
- elm_win_rotation_with_resize_set(widgetView->m_elmWidget, 270);
- }
- }
-
- widgetView->m_windowData->userlayoutCallbackAdd(
- EVAS_CALLBACK_RESIZE,
- resizeUserlayoutCallback,
- widgetView);
- if (!widgetView->m_firstUriChanged) {
- EVAS_WEBVIEW(widgetView).ConnectSmartCallback(
- EVAS_SMART_CALLBACK_FINISHED,
- &finishedCallback,
- launchStruct,
- widgetView);
- }
-}
-
-void ViewLogic::disconnectCallbacks(WidgetModel *widgetModel)
-{
- Assert(widgetModel);
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
- Assert(widgetView);
- LogDebug("Disconnecting callbacks ...");
-
- // key
- ecore_event_handler_del(widgetView->m_eventHandlerDown);
- ecore_event_handler_del(widgetView->m_eventHandlerUp);
-
- if (widgetModel->Type.Get().appType == WrtDB::APP_TYPE_TIZENWEBAPP) {
- if (widgetModel->SettingList.Get().getBackButtonPresence() ==
- BackButton_Enable)
- {
- widgetView->m_windowData->delFloatBackButtonCallback(
- EVAS_SMART_CALLBACK_CLICKED,
- &ViewLogic::backKeyCallback);
- }
- }
-
- widgetView->m_windowData->userlayoutCallbackDel(
- EVAS_CALLBACK_RESIZE,
- resizeUserlayoutCallback);
- LogDebug("Disconnecting callbacks done");
-}
-
-void ViewLogic::connectViewCallbacks(WidgetViewDataStruct *widgetView,
- EvasStruct* evasStruct)
-{
- using namespace ViewModule::SchemeSupport;
-
- LogDebug("connectViewCallbacks");
- Assert(widgetView);
- Assert(widgetView->m_currentEvasStruct);
-
- EvasObject elmWebView = evasStruct->m_elmWebView;
- EvasObject webView = evasStruct->m_webView;
- EvasObject webViewFrame = evasStruct->m_webViewFrame;
-
- // connection callback to ewk
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_STARTED,
- &startedCallback,
- widgetView->m_widgetModel->Type.Get(),
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_PROGRESS,
- &progressCallback,
- widgetView);
- if (widgetView->m_firstUriChanged) {
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_FINISHED,
- &finishedCallback,
- static_cast<WidgetLaunchStruct*>(NULL),
- widgetView);
- }
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_URI_CHANGED,
- &uriChangedCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_LINK_HOVER_IN,
- &linkHoverInCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_LINK_HOVER_OUT,
- &linkHoverOutCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_WEBVIEW_RESIZE,
- &webviewResizeCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_CREATE_WEBVIEW,
- &createWebviewCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_WINDOW_CLOSE,
- &windowCloseCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_SHOULD_ALLOW_OPEN,
- &shouldAllowOpenCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_FRAME_CREATED,
- &frameCreatedCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_ONE_SINGLE_TAP,
- &oneSingleTapCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_DOWNLOAD_REQUEST,
- &downloadRequestCallback,
- widgetView);
- webView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_HTML5_VIDEO_REQUEST,
- &html5VideoRequestCallback,
- widgetView);
-
- // We shall connect to size change event because we need actual size for
- // widget preferences
- widgetView->m_contentSizeChangedConnection = webViewFrame.
- ConnectSmartCallback(EVAS_SMART_CALLBACK_CONTENT_SIZE_CHANGED,
- &contentResizeCallback,
- widgetView);
- webViewFrame.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_RESOURCE_REQUEST_WILL_SEND,
- &resourceRequestWillSendCallback,
- widgetView);
- webViewFrame.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_SUBMIT_CLICKED,
- &submitClickedCallback,
- widgetView);
-
- // connection callback to elm-webview
- elmWebView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_PANNING_STARTED,
- &panningStartedCallback,
- widgetView);
- elmWebView.ConnectSmartCallback(
- EVAS_SMART_CALLBACK_PANNING_FINISHED,
- &panningFinishedCallback,
- widgetView);
-
- std::string prefix = DPL::ToUTF8String(
- m_widgetView->m_widgetModel->PrefixURL.Get());
- elm_webview_scheme_callback_set(
- elmWebView, prefix.c_str(), &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_FILE, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_HTTPS, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_HTTP, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_MMSTO, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_MAILTO, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_TEL, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_DATA, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_SMS, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_WIDGET, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_YOUTUBE, &schemeCallback);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_RTSP, &schemeCallback);
-}
-
-void ViewLogic::disconnectViewCallbacks(WidgetViewDataStruct *widgetView,
- EvasStruct* evasStruct)
-{
- using namespace ViewModule::SchemeSupport;
-
- LogDebug("disconnectViewCallbacks callbacks ...");
- Assert(widgetView != NULL);
- Assert(evasStruct != NULL);
-
- EvasObject elmWebView = evasStruct->m_elmWebView;
- EvasObject webView = evasStruct->m_webView;
- EvasObject webViewFrame = evasStruct->m_webViewFrame;
-
- if (widgetView->m_contentSizeChangedConnection) {
- webViewFrame.DisconnectCallback(
- widgetView->m_contentSizeChangedConnection);
- widgetView->m_contentSizeChangedConnection = NULL;
- }
- webView.DisconnectAll();
- webViewFrame.DisconnectAll();
- elmWebView.DisconnectAll();
-
- std::string prefix = DPL::ToUTF8String(
- m_widgetView->m_widgetModel->PrefixURL.Get());
- elm_webview_scheme_callback_set(
- elmWebView, prefix.c_str(), NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_FILE, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_HTTPS, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_HTTP, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_MMSTO, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_MAILTO, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_TEL, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_DATA, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_SMS, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_WIDGET, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_YOUTUBE, NULL);
- elm_webview_scheme_callback_set(
- elmWebView, SCHEME_TYPE_RTSP, NULL);
-
- LogDebug("disconnectViewCallbacks callbacks done");
-}
-
-void ViewLogic::suspendWidget(WidgetModel *widgetModel,
- const OperationStatusStruct &operationStatus)
-{
- LogInfo("Pausing widget");
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
-
- if (!widgetView) {
- LogError("Invalid widget model passed!");
- return;
- }
-
- suspendWebkit(widgetView);
-
- // Inform listeners
- POST_USER_CALLBACK(
- new OperationStatusCallbackCall(
- operationStatus.operationStatusCallback,
- widgetModel->Handle.Get(),
- CommonError::WrtSuccess,
- operationStatus.userParam));
-}
-
-void ViewLogic::resumeWidget(WidgetModel *widgetModel,
- const OperationStatusStruct &operationStatus)
-{
- LogInfo("Resume widget");
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
-
- if (!widgetView) {
- LogError("Invalid widget model passed!");
- return;
- }
- resumeWebkit(widgetView);
- elm_win_activate(widgetView->m_elmWidget);
- // Inform listeners
- POST_USER_CALLBACK(
- new OperationStatusCallbackCall(
- operationStatus.operationStatusCallback,
- widgetModel->Handle.Get(),
- CommonError::WrtSuccess,
- operationStatus.userParam));
-}
-
-void ViewLogic::widgetWebkitReset(WidgetModel *widgetModel,
- std::string appService)
-{
- LogInfo("widgetWebkitReset");
- LogInfo("appService = " << appService);
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
-
- if (!widgetView || !EVAS_WEBVIEW(widgetView)) {
- LogError("Invalid widget model passed!");
- return;
- }
-
- // stop and destory current webview
- ewk_view_stop(EVAS_WEBVIEW(widgetView));
- evas_object_hide(EVAS_WEBVIEW(widgetView));
- widgetView->m_windowData->unsetEvasObjectForLayout();
- widgetView->m_viewLogic->removeWebview(widgetView);
- // remove all webview in the list
- FOREACH(it, widgetView->m_evasStructList) {
- widgetView->m_currentEvasStruct = *it;
- evas_object_del(EVAS_ELM_WEBVIEW(widgetView));
- evas_object_del(EVAS_WEBVIEW(widgetView));
- }
- widgetView->m_evasStructList.clear();
- // create new webview
- widgetView->m_viewLogic->createWebview(widgetView);
-
- widgetView->m_currentUri =
- ViewModule::UriSupport::getUri(appService, widgetModel);
-
- elm_webview_uri_set(EVAS_ELM_WEBVIEW(widgetView),
- widgetView->m_currentUri.c_str());
- setLayoutIdlerCallback(widgetView);
-}
-
-std::string ViewLogic::getWidgetUAValue(WidgetModel *widgetModel)
-{
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
-
- if (!widgetView || !EVAS_WEBVIEW(widgetView)) {
- return "USER_AGENT_DATA";
- }
- std::string ret;
- ret = ewk_view_setting_user_agent_get(EVAS_WEBVIEW(widgetView));
- return ret;
-}
-
-void ViewLogic::javaScriptSuspend(WidgetModel *widgetModel)
-{
- //TODO REMOVE
- LogInfo("Pausing widget");
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
-
- if (!widgetView) {
- LogError("Invalid widget model passed!");
- return;
- }
-
- ewk_view_javascript_suspend(EVAS_WEBVIEW(widgetView));
-}
-
-void ViewLogic::javaScriptResume(WidgetModel *widgetModel)
-{
- //TODO REMOVE
- LogInfo("Resume widget");
- WidgetViewDataStruct *widgetView = findWidgetView(widgetModel);
-
- if (!widgetView) {
- LogError("Invalid widget model passed!");
- return;
- }
-
- ewk_view_javascript_resume(EVAS_WEBVIEW(widgetView));
-}
-
-EvasObject ViewLogic::getViewForHandle(WidgetHandle handle) const
-{
- EvasObject evas;
- WidgetViewDataStruct* widgetView = findWidgetViewForHandle(handle);
- if (!widgetView) {
- LogError("View for handle doesn't exist");
- return evas;
- }
- evas = EVAS_WEBVIEW(widgetView);
- return evas;
-}
-
-void ViewLogic::prepareWebview(WidgetViewDataStruct* widgetView)
-{
- ADD_PROFILING_POINT("prepareWebview", "start");
- LogInfo("Launching widget model view..." << widgetView->m_widgetHandle);
-
- // Create ELM WebView
- ADD_PROFILING_POINT("CreateElmWebView", "start");
- EVAS_ELM_WEBVIEW(widgetView) =
- elm_webview_add(widgetView->m_elmWidget, EINA_TRUE);
- ADD_PROFILING_POINT("CreateElmWebView", "stop");
-
- // Retrieve underlying ewk view
- EVAS_WEBVIEW(widgetView) = elm_webview_webkit_get(
- EVAS_ELM_WEBVIEW(widgetView));
- EVAS_WEBVIEW_FRAME(widgetView) = ewk_view_frame_main_get(
- EVAS_WEBVIEW(widgetView));
-
- // Touch processor
- elm_webview_enable_default_touch_set(
- EVAS_ELM_WEBVIEW(widgetView),
- EINA_TRUE);
-
- WrtDB::WidgetDAOReadOnly dao(widgetView->m_widgetHandle);
-
- LogInfo("ELM-WEBVIEW ENABLED");
- if (dao.getWebkitPluginsRequired()) {
- LogDebug("Webkit Plugins ENABLED");
- // Enable Plugins
- ewk_view_setting_enable_plugins_set(EVAS_WEBVIEW(widgetView), 1);
- } else {
- LogDebug("Webkit Plugins DISABLED");
- }
-
- ewk_view_mode_set(EVAS_WEBVIEW(widgetView), widgetView->m_viewMode);
- // AC is always off
- ewk_view_setting_accelerated_compositing_enable_set(
- EVAS_WEBVIEW(widgetView), EINA_FALSE);
- // External viedeo player is almost off
- Eina_Bool bExternalVideoplayer = EINA_FALSE;
- // Magnifier is almost off
- Eina_Bool bMagnifier = EINA_FALSE;
- if (widgetView->m_widgetModel->Type.Get().appType ==
- WrtDB::APP_TYPE_TIZENWEBAPP)
- {
- if (widgetView->m_widgetModel->
- SettingList.Get().getExternalVideoplayer()
- == ExternalVideoplayer_Enable)
- {
- bExternalVideoplayer = EINA_TRUE;
- }
- if (widgetView->m_widgetModel->SettingList.Get().getMagnifier() ==
- Magnifier_On)
- {
- bMagnifier = EINA_TRUE;
- }
- }
- widgetView->initializeBrowserSettings();
-
- ewk_view_setting_enable_scripts_set(
- EVAS_WEBVIEW(widgetView), EINA_TRUE);
- ewk_view_setting_auto_load_images_set(
- EVAS_WEBVIEW(widgetView), EINA_TRUE);
- ewk_view_setting_enable_plugins_set(
- EVAS_WEBVIEW(widgetView), EINA_TRUE);
- ewk_view_setting_enable_specified_plugin_set(
- EVAS_WEBVIEW(widgetView), EINA_TRUE, FLASH_MIME_TYPE);
- ewk_view_setting_html5video_external_player_enable_set(
- EVAS_WEBVIEW(widgetView), bExternalVideoplayer);
- elm_webview_show_magnifier_set(
- EVAS_ELM_WEBVIEW(widgetView), bMagnifier);
-
- if (widgetView->m_widgetModel->Type.Get().appType ==
- WrtDB::APP_TYPE_TIZENWEBAPP)
- {
- if (!((widgetView->m_widgetModel->SettingList.Get().getUserAgent())
- .empty()))
- {
- ewk_view_setting_user_agent_set(
- EVAS_WEBVIEW(widgetView),
- (widgetView->m_widgetModel->SettingList.Get().getUserAgent())
- .c_str());
- }
- }
-
- elm_webview_auto_fitting_set(EVAS_ELM_WEBVIEW(widgetView), EINA_FALSE);
- // disable zoom option when user click the input field
- // this option is useful with the normal website
- // for the make user friendly, disable auto zoom in the webapp
- elm_webview_input_field_zoom_set(EVAS_ELM_WEBVIEW(widgetView), EINA_FALSE);
- // set visibility to WebCore. This value will be used for html5.
- // also, this value will be changed in the suspend, resume
- // or create window, close window.
- ewk_view_visibility_state_set(
- EVAS_WEBVIEW(widgetView),
- EWK_PAGE_VISIBILITY_STATE_VISIBLE, EINA_TRUE);
-
- // set cookie database path
- if (!ewk_cookies_file_set(dao.getCookieDatabasePath().c_str())) {
- LogError("Fail to set Cookie path");
- }
-
- // set local stroage database path
- if (!ewk_view_setting_local_storage_database_path_set(
- EVAS_WEBVIEW(widgetView),
- dao.getPrivateLocalStoragePath().c_str()))
- {
- LogError("Fail to set Local stroage path");
- }
-
- // Load all needed plugins
- ADD_PROFILING_POINT("LoadingPluginsIntoSession", "start");
- PluginLogicSingleton::Instance().startSession(
- widgetView->m_widgetModel->Handle.Get(),
- EVAS_WEBVIEW(widgetView),
- DEFAULT_ENGINE_INTERFACE,
- widgetView->m_elmScale);
- ADD_PROFILING_POINT("LoadingPluginsIntoSession", "stop");
-
- ADD_PROFILING_POINT("prepareWebview", "stop");
-}
-
-void ViewLogic::createWebview(WidgetViewDataStruct* widgetView)
-{
- LogInfo("createWebview called");
- Assert(widgetView);
- // create EvasStruct
- EvasStruct *evasStruct = new EvasStruct();
- widgetView->m_currentEvasStruct = evasStruct;
- // set webview
- widgetView->m_viewLogic->prepareWebview(widgetView);
- widgetView->m_evasStructList.push_back(evasStruct);
- // register callback
- widgetView->m_viewLogic->connectViewCallbacks(
- widgetView,
- widgetView->m_currentEvasStruct);
- return;
-}
-
-void ViewLogic::removeWebview(WidgetViewDataStruct* widgetView)
-{
- LogInfo("removeWebview called");
- Assert(widgetView);
- Assert(1 <= widgetView->m_evasStructList.size());
- // unregister plugin session
- PluginLogicSingleton::Instance().stopSession();
- JSGlobalContextRef jsGlobalContext =
- ewk_view_get_global_context(EVAS_WEBVIEW(widgetView));
- JSGarbageCollect(jsGlobalContext);
- // unregister callback
- widgetView->m_viewLogic->disconnectViewCallbacks(
- widgetView,
- widgetView->m_currentEvasStruct);
- // suspend NPAPI plugin
- ewk_view_pause_or_resume_plugins(EVAS_WEBVIEW(widgetView), EINA_TRUE);
- // release data strucutre
- widgetView->m_evasStructList.remove(widgetView->m_currentEvasStruct);
- evas_object_del(EVAS_ELM_WEBVIEW(widgetView));
- evas_object_del(EVAS_WEBVIEW(widgetView));
- delete widgetView->m_currentEvasStruct;
- return;
-}
-
-void ViewLogic::resumeWebview(WidgetViewDataStruct* widgetView)
-{
- LogInfo("resumeWebview called");
- Assert(widgetView);
- Assert(1 <= widgetView->m_evasStructList.size());
- // resume previous webview
- widgetView->m_currentEvasStruct = widgetView->m_evasStructList.back();
- // register callback
- widgetView->m_viewLogic->connectViewCallbacks(
- widgetView,
- widgetView->m_currentEvasStruct);
- // resume webkit
- widgetView->m_viewLogic->resumeWebkit(widgetView);
- // Add plugin
- PluginLogicSingleton::Instance().startSession(
- widgetView->m_widgetModel->Handle.Get(),
- EVAS_WEBVIEW(widgetView),
- DEFAULT_ENGINE_INTERFACE,
- widgetView->m_elmScale);
- LogInfo("Finished windowCloseIdlerCallback");
- return;
-}
-
-void ViewLogic::suspendWebview(WidgetViewDataStruct* widgetView)
-{
- LogInfo("suspendWebview called");
- // remove plugin
- PluginLogicSingleton::Instance().stopSession();
- JSGlobalContextRef jsGlobalContext =
- ewk_view_get_global_context(EVAS_WEBVIEW(widgetView));
- JSGarbageCollect(jsGlobalContext);
- // remove callback
- widgetView->m_viewLogic->disconnectViewCallbacks(
- widgetView,
- widgetView->m_currentEvasStruct);
- // suspend webkit
- widgetView->m_viewLogic->suspendWebkit(widgetView);
- return;
-}
-
-void ViewLogic::resumeWebkit(WidgetViewDataStruct* widgetView)
-{
- LogDebug("resumeWebkit");
- // check if suspend timer was expired
- if (widgetView->m_suspendTimer != NULL) {
- ecore_timer_del(widgetView->m_suspendTimer);
- widgetView->m_suspendTimer = NULL;
- }
-
- // resume NPAPI plugin
- ewk_view_pause_or_resume_plugins(EVAS_WEBVIEW(widgetView), EINA_FALSE);
- ewk_view_javascript_resume(EVAS_WEBVIEW(widgetView));
- ewk_view_enable_render(EVAS_WEBVIEW(widgetView));
- ewk_view_reduce_plugins_frame_rate(EVAS_WEBVIEW(widgetView), EINA_FALSE);
- ewk_view_resume_request(EVAS_WEBVIEW(widgetView));
- ewk_view_visibility_state_set(
- EVAS_WEBVIEW(widgetView),
- EWK_PAGE_VISIBILITY_STATE_VISIBLE, EINA_FALSE);
-
- return;
-}
-
-void ViewLogic::suspendWebkit(WidgetViewDataStruct* widgetView)
-{
- LogDebug("suspendWebkit");
-
- // suspend immediately
- ewk_view_pause_or_resume_plugins(EVAS_WEBVIEW(widgetView), EINA_TRUE);
-
- // send visibility event to webpage
- ewk_view_visibility_state_set(
- EVAS_WEBVIEW(widgetView),
- EWK_PAGE_VISIBILITY_STATE_HIDDEN, EINA_FALSE);
-
- // set a timer to be used to wait for SUSPEND_WAIT_TIME_THRESHOLD
- widgetView->m_needSuspendWebview = EVAS_WEBVIEW(widgetView);
- widgetView->m_suspendTimer =
- ecore_timer_add(SUSPEND_WAIT_TIME_THRESHOLD,
- suspendTimerCallback, widgetView);
- return;
-}
-
-WidgetViewDataStruct*
-ViewLogic::findWidgetView(WidgetModel */*widgetModel*/) const
-{
- return m_widgetView;
-}
-
-WidgetViewDataStruct *ViewLogic::findWidgetViewForHandle(
- WidgetHandle widgetHandle) const
-{
- LogDebug("findWidgetViewForHandle");
- WidgetModel* widgetModel = m_widgetView->getWidgetModel();
- if (widgetModel != NULL) {
- if (widgetModel->Handle.Get() == widgetHandle) {
- return m_widgetView;
- } else {
- LogDebug("WidgetHandle wrong");
- return NULL;
- }
- } else {
- LogDebug("widgetModel is null");
- return NULL;
- }
-}
-
-void ViewLogic::backKeyCallback(void * data,
- Evas_Object * /*obj*/,
- void * /*event_info*/)
-{
- LogInfo("BackKeyCallback called");
-
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
-
- if (!widgetView) {
- LogError("Required object(widgetView) is NULL!!");
- return;
- }
-
- if (ewk_view_back_possible(EVAS_WEBVIEW(widgetView))) {
- if (!ewk_view_back(EVAS_WEBVIEW(widgetView))) {
- LogError("ewk_view_back is failed");
- }
- } else {
- int webview_count = widgetView->m_evasStructList.size();
- LogInfo("Current number of webview " << webview_count);
-
- if (1 >= webview_count) {
- // If there is no previous page, widget move to backgroud.
- LogInfo("Widget move to backgroud");
- elm_win_lower(widgetView->m_elmWidget);
- } else {
- // Back to previous webview
- LogInfo("Widget move to previous webview");
- ecore_idler_add(windowCloseIdlerCallback, widgetView);
- }
- }
-}
-
-void ViewLogic::resizeUserlayoutCallback(void* data,
- Evas* /* evas */,
- Evas_Object* /* userlayout */,
- void* /* event_info */)
-{
- LogInfo("resizeWebviewElm called");
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
- Assert(widgetView && "widgetView is NULL");
-
- widgetView->m_windowData->moveProgress();
-}
-
-Eina_Bool ViewLogic::keydownEvent(void *data, int /*type*/, void *event)
-{
- using namespace ViewModule::KeysSupport;
-
- LogDebug("keydownEvent called");
- Ecore_Event_Key *ev = static_cast<Ecore_Event_Key *>(event);
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
-
- if (!ev ||
- !widgetView ||
- !widgetView->m_widgetModel)
- {
- return ECORE_CALLBACK_RENEW;
- }
-
- Ecore_Evas *ee = ecore_evas_ecore_evas_get(widgetView->m_view);
- Ecore_Window myWin = ecore_evas_window_get(ee);
- if (myWin != ev->event_window) {
- return ECORE_CALLBACK_RENEW;
- }
-
- if (widgetView->m_widgetModel->BackSupported.Get()) {
- // We should send this signal back to webkit
- if (!strcmp(ev->keyname, KEYS_END)) {
- LogDebug("Send to Webkit");
- Evas_Event_Key_Down evas_event =
- getEvasFromEcoreKey<Evas_Event_Key_Down>(
- widgetView->m_view,
- ev);
-
- //after setting focus the key event shows in webkit,but not
- //on first time evas_object_focus_set(EVAS_WEBVIEW(widgetView),
- //EINA_TRUE);
- ewk_frame_feed_key_down(
- EVAS_WEBVIEW_FRAME(widgetView),
- &evas_event);
- }
- return ECORE_CALLBACK_CANCEL;
- } else {
- // We should send this to close widget
- if (!strcmp(ev->keyname, KEYS_END)) {
- LogDebug("Send back key to daemon peer");
- evas_object_smart_callback_call(//TODO is it still correct?
- widgetView->m_elmWidget,
- WinKeyEvent,
- event);
- return ECORE_CALLBACK_CANCEL;
- }
- }
- return ECORE_CALLBACK_RENEW;
-}
-
-Eina_Bool ViewLogic::keyupEvent(void *data, int /*type*/, void *event)
-{
- using namespace ViewModule::KeysSupport;
-
- LogDebug("keyupEvent called");
- Ecore_Event_Key *ev = static_cast<Ecore_Event_Key *>(event);
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
-
- if (!ev ||
- !widgetView ||
- !widgetView->m_widgetModel)
- {
- return ECORE_CALLBACK_RENEW;
- }
-
- Ecore_Evas *ee = ecore_evas_ecore_evas_get(widgetView->m_view);
- Ecore_Window myWin = ecore_evas_window_get(ee);
- if (myWin != ev->event_window) {
- return ECORE_CALLBACK_RENEW;
- }
-
- if (widgetView->m_widgetModel->BackSupported.Get()) {
- if (!strcmp(ev->keyname, KEYS_END)) {
- LogDebug("Entered keyup event");
- Evas_Event_Key_Up evas_event =
- getEvasFromEcoreKey<Evas_Event_Key_Up>(
- widgetView->m_view,
- ev);
- //after setting focus the key event shows in webkit,but not on
- //first time evas_object_focus_set(EVAS_WEBVIEW(widgetView),
- //EINA_TRUE);
- ewk_frame_feed_key_up(
- EVAS_WEBVIEW_FRAME(widgetView),
- &evas_event);
- return ECORE_CALLBACK_CANCEL;
- }
- } else {
- LogInfo("We don't send keyup to daemon peer");
- }
- return ECORE_CALLBACK_RENEW;
-}
-
-void ViewLogic::startedCallback(EvasObject::IConnection* /*conn*/,
- void* /*event_info*/,
- WrtDB::WidgetType widgetType,
- WidgetViewDataStruct* widgetView)
-{
- LogDebug("StartedCallback called");
- widgetView->m_windowData->loadingOn();
- // This value will be used in the "resource,request,willsend" and
- // "uri,changed". It will be used skip WARP checking in the
- // "resource,request,willsend" callback. Then uri will be checked
- // WARP in the "uri,changed". If there in no permission for
- // WARP, uri will be opened in the External Browser
- if (widgetType.appType == WrtDB::APP_TYPE_TIZENWEBAPP) {
- widgetView->m_isMainResource = true;
- }
-}
-
-void ViewLogic::progressCallback(EvasObject::IConnection* /*conn*/,
- void* /*event_info*/,
- WidgetViewDataStruct* widgetView)
-{
- double progress = ewk_view_load_progress_get(EVAS_WEBVIEW(widgetView));
-
- LogDebug("ProgressCallback called % = [" << progress << "]");
-
- if (progress > PROGRESS_STOP_LOADING_PERCENT) {
- if (widgetView->m_progressTimer) {
- ecore_timer_del(widgetView->m_progressTimer);
- widgetView->m_progressTimer = NULL;
- }
-
- widgetView->m_progressTimer =
- ecore_timer_add(
- PROGRESS_STOP_LOADING_TIME_THRESHOLD,
- progressTimerCallback, widgetView);
- }
-}
-
-void ViewLogic::finishedCallback(EvasObject::IConnection* connection,
- void* /*event_info*/,
- WidgetLaunchStruct* widgetLaunchStruct,
- WidgetViewDataStruct* widgetView)
-{
- LogDebug("finishedCallback called");
- if (widgetView->m_progressTimer) {
- ecore_timer_del(widgetView->m_progressTimer);
- widgetView->m_progressTimer = NULL;
- }
- widgetView->m_windowData->loadingOff();
- if (widgetView->m_viewMode == EWK_VIEW_MODE_FULLSCREEN
- || widgetView->m_viewMode == EWK_VIEW_MODE_MAXIMIZED)
- {
- widgetView->m_windowData->emitSignalForUserLayout(
- EDJE_SHOW_BACKWARD_SIGNAL, "");
- }
-
- DPL::Optional<WrtDB::GlobalDAOReadOnly::AutoSaveData> autoData
- = ViewModule::PasswordSupport::getAutoFillData(
- widgetView->m_currentUri.c_str());
- if (!autoData.IsNull()) {
- ewk_view_autofill_personal_data(
- EVAS_WEBVIEW(widgetView),
- DPL::ToUTF8String(autoData->userId).c_str(),
- DPL::ToUTF8String(autoData->passwd).c_str());
- }
-
- if (!widgetView->m_firstUriLoadFinished) {
- LogInfo("Widget model view launched. Posting resulting"
- " callback to user callback controller.");
- LaunchFinishedCallbackCall* cb =
- new LaunchFinishedCallbackCall(
- widgetLaunchStruct->launchFinishedCallback,
- static_cast<Evas_Object*>(EVAS_ELM_WEBVIEW(widgetView)),
- widgetView->m_widgetHandle,
- CommonError::WrtSuccess,
- _("IDS_BR_POP_MIDP_SUCCESS"),
- widgetLaunchStruct->userParam);
- widgetView->m_firstUriLoadFinished = true;
- POST_USER_CALLBACK(cb);
-
- //disconnect from this callback
- connection->Disconnect();
- // define temp argument
- WidgetLaunchStruct* launchStruct = NULL;
- //Add callback again without widgetLaunchStruct.
- //WidgetLaunchStruct used for post LaunchFinishedCallbackCall.
- EVAS_WEBVIEW(widgetView).ConnectSmartCallback(
- EVAS_SMART_CALLBACK_FINISHED,
- &finishedCallback,
- launchStruct,
- widgetView);
- delete widgetLaunchStruct;
- }
-}
-
-void ViewLogic::uriChangedCallback(EvasObject::IConnection* /*connection*/,
- void* event_info,
- WidgetViewDataStruct* widgetView)
-{
- const char *uri = static_cast<const char *>(event_info);
-
- // If current uri doesn't have permission for opening in the main window,
- // uri open in the external browser
- if (widgetView->m_isMainResource) {
- widgetView->m_isMainResource = false;
- if (!ViewModule::SecuritySupport::checkWARP(
- uri,
- widgetView->m_widgetModel))
- {
- LogDebug("Request was blocked by WARP: " << uri);
- ViewModule::SchemeSupport::handleURIByScheme(
- ViewModule::SchemeSupport::SCHEME_TYPE_HTTP,
- uri);
- if (ewk_view_back_possible(EVAS_WEBVIEW(widgetView))) {
- if (!ewk_view_back(EVAS_WEBVIEW(widgetView))) {
- LogError("ewk_view_back is failed");
- }
- } else {
- if (!ewk_view_stop(EVAS_WEBVIEW(widgetView))) {
- LogError("ewk_view_stop is failed.\n");
- }
- LogInfo("Widget move to previous webview");
- ecore_idler_add(windowCloseIdlerCallback, widgetView);
- }
- return;
- }
- }
-
- if (!widgetView->m_firstUriChanged) {
- LogInfo("First UriChanged occured! Uri: " << uri);
- widgetView->m_firstUriChanged = true;
- widgetView->m_currentUri = uri;
- return;
- }
-
- std::string matchedScheme;
- std::string matchedUri;
- if (pcrecpp::RE(PATTERN_URI_CHANGE).PartialMatch(uri,
- &matchedUri,
- &matchedScheme))
- {
- LogDebug("Scheme: " << matchedScheme << ", Uri: " << matchedUri);
- if (widgetView->m_currentUri == matchedUri) {
- return;
- }
- widgetView->m_currentUri = matchedUri;
- }
-
- LogInfo("Next UriChanged occured! Uri: " << uri);
- LogInfo("Stop session");
- // Unload plugins
- PluginLogicSingleton::Instance().stopSession();
-
- // This callback is called for ONLY http, https, file, widget scheme.
- // uri with file/widget scheme has wrt plugin objects
- // unconditionally for WAC/Tizen.
- // But WRT should check uri with http, https scheme for Tizen
- // if the uri with the scheme are included in white list, or not.
- // TODO how about 'ftp' scheme?
- if (ViewModule::SchemeSupport::SCHEME_TYPE_HTTP == matchedScheme
- || ViewModule::SchemeSupport::SCHEME_TYPE_HTTPS == matchedScheme)
- {
- if (widgetView->m_widgetModel->Type.Get().appType
- == WrtDB::APP_TYPE_TIZENWEBAPP)
- {
- if (!ViewModule::SecuritySupport::checkWhitelist(uri)) {
- LogInfo("This uri is not included in white document list");
- return;
- }
- LogInfo("This is URI included in WhiteList");
- } else {
- // For WAC, WRT should block access of device api
- // for external documents
- return;
- }
- }
-
- LogInfo("Start Session");
- JSGlobalContextRef jsGlobalContext =
- ewk_view_get_global_context(EVAS_WEBVIEW(widgetView));
- JSGarbageCollect(jsGlobalContext);
- PluginLogicSingleton::Instance().startSession(
- widgetView->m_widgetModel->Handle.Get(),
- EVAS_WEBVIEW(widgetView),
- DEFAULT_ENGINE_INTERFACE,
- widgetView->m_elmScale);
-}
-
-void ViewLogic::linkHoverInCallback(EvasObject::IConnection* /*conn*/,
- void* event_info,
- WidgetViewDataStruct* widgetView)
-{
- LogDebug("Called");
- Assert(widgetView);
-
- // link[0] is a links href, link[1] is a link title
- const char** link = static_cast<const char**>(event_info);
- if (!link || !link[0]) {
- LogError("No link passed");
- return;
- }
- widgetView->hoveredLink = DPL::FromUTF8String(link[0]);
-}
-
-void ViewLogic::linkHoverOutCallback (EvasObject::IConnection* /*conn*/,
- void* /*event_info*/,
- WidgetViewDataStruct* widgetView)
-{
- LogDebug("Called");
- Assert(widgetView);
- widgetView->hoveredLink = DPL::FromUTF8String("");
-}
-
-void ViewLogic::webviewResizeCallback(EvasObject::IConnection* /*conn*/,
- void* event_info,
- WidgetViewDataStruct* widgetView)
-{
- Evas_Point* point = static_cast<Evas_Point *>(event_info);
- widgetView->webviewMaxWidth = point->x;
- widgetView->webviewMaxHeight = point->y;
- LogDebug("WebView max size hint: " << point->x << " " << point->y);
-
- ViewLogic *This = widgetView->m_viewLogic;
- This->doContentResize(widgetView);
-}
-
-void ViewLogic::createWebviewCallback(EvasObject::IConnection* /*conn*/,
- void* event_info,
- WidgetViewDataStruct* widgetView)
-{
- LogInfo("createWebviewCallback called");
- Elm_WebView_Create_Webview_Data *createWebviewData =
- static_cast<Elm_WebView_Create_Webview_Data *>(event_info);
- // ToDo : investigate cases which are using "navigation_action"
- LogInfo("navigation_action [" <<
- createWebviewData->navigation_action << "]");
- LogInfo("frame_name [" << createWebviewData->frame_name << "]");
- LogInfo("isMobile [" << (bool)createWebviewData->isMobile << "]");
- LogInfo("javascript [" << (bool)createWebviewData->javascript << "]");
-/*
-typedef enum {
- WEBKIT_WEB_NAVIGATION_REASON_LINK_CLICKED,
- WEBKIT_WEB_NAVIGATION_REASON_FORM_SUBMITTED,
- WEBKIT_WEB_NAVIGATION_REASON_BACK_FORWARD,
- WEBKIT_WEB_NAVIGATION_REASON_RELOAD,
- WEBKIT_WEB_NAVIGATION_REASON_FORM_RESUBMITTED,
- WEBKIT_WEB_NAVIGATION_REASON_OTHER,
-} WebKitWebNavigationReason;
-*/
- widgetView->m_viewLogic->suspendWebview(widgetView);
- evas_object_hide(EVAS_ELM_WEBVIEW(widgetView));
- widgetView->m_viewLogic->createWebview(widgetView);
- createWebviewData->webview = EVAS_WEBVIEW(widgetView);
- widgetView->m_windowData->unsetEvasObjectForLayout();
- widgetView->m_windowData->setEvasObjectForLayout(
- EVAS_ELM_WEBVIEW(widgetView));
- evas_object_show(EVAS_ELM_WEBVIEW(widgetView));
- return;
-}
-
-void ViewLogic::windowCloseCallback(EvasObject::IConnection* /*conn*/,
- void* /*event_info*/,
- WidgetViewDataStruct *widgetView)
-{
- LogInfo("WindowCloseCallback called");
- ecore_idle_enterer_before_add(windowCloseIdlerCallback, widgetView);
-}
-
-void ViewLogic::shouldAllowOpenCallback(EvasObject::IConnection* /*conn*/,
- void* eventInfo,
- WidgetViewDataStruct* widgetView)
-{
- LogInfo("shouldAllowOpenCallback called");
- Ewk_Should_Allow_Open_Uri_Return* ret =
- static_cast<Ewk_Should_Allow_Open_Uri_Return*>(eventInfo);
- if (!ret) {
- LogError("Ewk callback failed");
- return;
- }
- Assert(widgetView);
- ret->ret =
- ViewModule::SchemeSupport::shouldAllowOpen(
- ret->uri,
- widgetView->m_widgetModel);
-}
-
-void ViewLogic::frameCreatedCallback(EvasObject::IConnection* /*data*/,
- void* /*obj*/,
- WidgetViewDataStruct */*widgetView*/)
-{
- PluginLogicSingleton::Instance().loadPluginsIntoIframes();
-}
-
-void ViewLogic::oneSingleTapCallback(EvasObject::IConnection* connection,
- void* event_info,
- WidgetViewDataStruct* widgetView)
-{
- LogInfo("oneSingleTapCallback");
- ViewLogic *This = widgetView->m_viewLogic;
- This->setCombobox(connection->GetEvasObject(), event_info, widgetView);
-}
-
-void ViewLogic::downloadRequestCallback(EvasObject::IConnection* /*conn*/,
- void* event_info,
- WidgetViewDataStruct* widgetView)
-{
- LogInfo("downloadRequestCallback called");
- Assert(event_info);
- Ewk_Download *download = static_cast<Ewk_Download *>(event_info);
-
- if (NULL == download->url) {
- LogError("url is null");
- return;
- }
- widgetView->m_viewLogic->m_appsSupport->downloadRequest(
- download->url, download->mime_type, download->user_param);
-}
-
-void ViewLogic::html5VideoRequestCallback(EvasObject::IConnection* /*conn*/,
- void* event_info,
- WidgetViewDataStruct* widgetView)
-{
- LogInfo("html5VideoRequestCallback called");
- Assert(event_info);
- widgetView->m_viewLogic->m_appsSupport->html5VideoRequest(event_info);
-}
-
-void ViewLogic::contentResizeCallback(EvasObject::IConnection* /*conn*/,
- void* /*event_info*/,
- WidgetViewDataStruct* widgetView)
-{
- ViewLogic *This = widgetView->m_viewLogic;
- This->doContentResize(widgetView);
-}
-
-void ViewLogic::resourceRequestWillSendCallback(
- EvasObject::IConnection* /*connection*/,
- void* eventInfo,
- WidgetViewDataStruct* widgetView)
-{
- Assert(widgetView);
- ViewLogic *This = widgetView->m_viewLogic;
- Assert(This);
- Ewk_Frame_Resource_Request *resourceRequest =
- static_cast<Ewk_Frame_Resource_Request *>(eventInfo);
-
- if (!resourceRequest || !(resourceRequest->url)) {
- LogDebug("Request is [NULL].");
- return;
- }
-
- LogDebug("Request " << resourceRequest->url);
-
- This->resourceRequestWillSend(resourceRequest);
-}
-
-void ViewLogic::submitClickedCallback(EvasObject::IConnection* /*conn*/,
- void* event_info,
- WidgetViewDataStruct* /*widgetView*/)
-{
- LogDebug("submitClickedCallback called");
- Assert(event_info);
- ViewModule::PasswordSupport::submitClicked(static_cast<char**>(event_info));
-}
-
-void ViewLogic::panningStartedCallback(EvasObject::IConnection* /*conn*/,
- void* /*event_info*/,
- WidgetViewDataStruct* widgetView)
-{
- ViewLogic *This = widgetView->m_viewLogic;
- This->setSelectiveRendering(EVAS_WEBVIEW(widgetView), EINA_TRUE);
-}
-
-void ViewLogic::panningFinishedCallback(EvasObject::IConnection* /*conn*/,
- void* /*event_info*/,
- WidgetViewDataStruct* widgetView)
-{
- ViewLogic *This = widgetView->m_viewLogic;
- This->setSelectiveRendering(EVAS_WEBVIEW(widgetView), EINA_FALSE);
-}
-
-Eina_Bool ViewLogic::schemeCallback(Evas_Object* /*object*/,
- const char* uri)
-{
- LogDebug("elm-schemeCallback called");
- return ViewModule::SchemeSupport::elmSchemeHandle(uri);
-}
-
-Eina_Bool ViewLogic::progressTimerCallback(void* data)
-{
- LogDebug("ProgressTimerCallback");
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
-
- ecore_timer_del(widgetView->m_progressTimer);
- widgetView->m_progressTimer = NULL;
- widgetView->m_windowData->loadingOff();
-
- return ECORE_CALLBACK_CANCEL;
-}
-
-Eina_Bool ViewLogic::suspendTimerCallback(void* data)
-{
- LogDebug("suspendTimerCallback");
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
-
- // stop UI
- EvasObject needSuspentWebview = widgetView->m_needSuspendWebview;
- ewk_view_javascript_suspend(needSuspentWebview);
- ewk_view_disable_render(needSuspentWebview);
- ewk_view_pre_render_cancel(needSuspentWebview);
- if (ewk_view_setting_enable_plugins_get(needSuspentWebview)) {
- ewk_view_reduce_plugins_frame_rate(needSuspentWebview, EINA_TRUE);
- }
- ewk_view_suspend_request(needSuspentWebview);
-
- // stop the timer to be used to wait for suspend
- widgetView->m_suspendTimer = NULL;
- return ECORE_CALLBACK_CANCEL;
-}
-
-Eina_Bool ViewLogic::setLayoutIdlerCallback(void *data)
-{
- LogDebug("setLayoutIdlerCallback");
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
- widgetView->m_windowData->unsetEvasObjectForLayout();
- widgetView->m_windowData->setEvasObjectForLayout(
- EVAS_ELM_WEBVIEW(widgetView));
- evas_object_show(EVAS_ELM_WEBVIEW(widgetView));
- return ECORE_CALLBACK_CANCEL;
-}
-
-Eina_Bool ViewLogic::windowCloseIdlerCallback(void *data)
-{
- LogDebug("windowCloseIdlerCallback");
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
- widgetView->m_viewLogic->windowClose(widgetView);
- return ECORE_CALLBACK_CANCEL;
-}
-
-void ViewLogic::setCombobox(
- Evas_Object* /*obj*/,
- void *event_info,
- WidgetViewDataStruct* widgetView)
-{
- LogInfo("setCombobox call");
-
- Assert(widgetView && "Invalid data passed!");
- Assert(event_info && "Invalid data passed!");
-
- Evas_Point *point = static_cast<Evas_Point *>(event_info);
- Eina_Rectangle rect;
- bool prev, next;
- int viewY;
- int unzoomedX = 0;
- int unzoomedY = 0;
- double zoom = 0;
-
- EvasObject webView =
- widgetView->m_currentEvasStruct->m_webView;
-
- zoom = ewk_view_zoom_get(webView);
- evas_object_geometry_get(webView, NULL, &viewY, NULL, NULL);
- unzoomedX = point->x / zoom;
- unzoomedY = (point->y - viewY) / zoom;
-
- WidgetViewDataStruct::ComboboxDataStruct *combo =
- &(widgetView->combo);
-
- combo->comboboxOptions =
- ewk_page_dropdown_get_options(webView,
- unzoomedX,
- unzoomedY,
- &(combo->comboboxOptionsSize),
- &(combo->comboboxOptionSelected),
- &rect,
- &prev,
- &next);
-
-
- if (combo->comboboxOptions != NULL) {
- combo->clickPosX = unzoomedX;
- combo->clickPosY = unzoomedY;
-
- WindowLogic::showComboboxCallback(
- combo->comboboxOptionsSize,
- combo->comboboxOptions,
- widgetView,
- &comboboxResponseCallback,
- widgetView->m_elmWidget);
- }
-}
-
-void ViewLogic::comboboxResponseCallback(
- int selected_index,
- void* data)
-{
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
-
- LogDebug("Combobox response: " << selected_index);
- if (selected_index < 0) {
- LogInfo("Combobox has been destroyed");
- } else {
- ewk_page_dropdown_set_current_index(
- widgetView->m_currentEvasStruct->m_webView,
- selected_index);
- }
-}
-
-void ViewLogic::resourceRequestWillSend(
- Ewk_Frame_Resource_Request* resourceRequest)
-{
- using namespace ViewModule::SecuritySupport;
-
- bool allocated = localizeURL(resourceRequest);
-
- // skip main resource for checking WARP in the 'uri,changed' callback
- if (m_widgetView->m_isMainResource == false &&
- !checkWARP(resourceRequest->url, m_widgetView->m_widgetModel))
- {
- LogDebug("Request was blocked by WARP: " << resourceRequest->url);
- blockRequest(resourceRequest, allocated, WARP_ERROR_MSG, true);
- return;
- }
-
- if (!checkACE(resourceRequest)) {
- LogDebug("Request was blocked by ACE: " << resourceRequest->url);
- blockRequest(resourceRequest, allocated, NULL, true);
- return;
- }
-
- bool usingNet = true;
- for (size_t i = 0; WITHOUT_NETWORK_SCHEMA[i]; ++i) {
- if (0 == strncmp(resourceRequest->url,
- WITHOUT_NETWORK_SCHEMA[i],
- strlen(WITHOUT_NETWORK_SCHEMA[i])))
- {
- usingNet = false;
- LogDebug("Without Network!!");
- break;
- }
- }
-
- #if 0 /* temporary patch. MUST update!! */
- if (usingNet) {
- if (!RoamingAgentSingleton::Instance().CheckAccess()) {
- LogDebug("Request was blocked by roaming settings: " <<
- resourceRequest->url);
- blockRequest(resourceRequest, allocated, ROAMING_ERROR_MSG);
- return;
- }
- }
- #endif
-
- if (!checkChildProtection(resourceRequest->url,
- m_widgetView->m_widgetModel))
- {
- LogDebug("Request was blocked by child protection: " <<
- resourceRequest->url);
- blockRequest(
- resourceRequest, allocated, ChildProtection::ForbiddenUri);
- return;
- }
-
-#if USE_DNET
- if (checkUriRequiredNet(resourceRequest->url) &&
- !NetSingleton::Instance().IsConnected())
- {
- LogInfo("open dnet : suspend request and open dnet");
- NetSingleton::Instance().Open(netOpenRsrcRequestCallback,
- m_widgetView);
- ewk_view_suspend_request(EVAS_WEBVIEW(m_widgetView));
- } else {
- LogDebug("requested uri : [" << resourceRequest->url <<
- "] file protocol is not needed to open dnet");
- }
-#endif
-}
-
-void ViewLogic::blockRequest(
- Ewk_Frame_Resource_Request *resourceRequest,
- bool allocated,
- const char *uriMessage,
- bool securityError)
-{
- resourceRequest->security_error = securityError;
- if (allocated) {
- free(const_cast<char*>(resourceRequest->url));
- }
- if (uriMessage && WrtDB::GlobalDAOReadOnly::GetDeveloperMode()) {
- resourceRequest->url = strdup(uriMessage);
- } else {
- resourceRequest->url = NULL;
- }
-}
-
-bool ViewLogic::localizeURL(Ewk_Frame_Resource_Request *request)
-{
- WidgetModel *model = m_widgetView->m_widgetModel;
-
- const char *end = strstr(request->url, ":");
- if (!end) {
- // lack of schema
- return false;
- }
- std::string scheme(request->url, end);
-
- if (scheme != ViewModule::SchemeSupport::SCHEME_TYPE_WIDGET
- && scheme != ViewModule::SchemeSupport::SCHEME_TYPE_FILE)
- {
- // schema unsupported
- return false;
- }
-
- //remove application service information
- std::string reqUri(request->url);
- std::string appService;
-
- if (reqUri.find("?") != std::string::npos) {
- appService = reqUri.c_str() + int(reqUri.find("?"));
- reqUri.erase(reqUri.begin() + int(reqUri.find("?")),reqUri.end());
- }
-
- DPL::Optional<DPL::String> found =
- W3CFileLocalization::getFilePathInWidgetPackageFromUrl(
- model->Handle.Get(),
- model->LanguageTags.Get(),
- DPL::FromUTF8String(reqUri));
-
- if (!!found) {
- std::string uri("file://" + DPL::ToUTF8String(*found));
- if (!appService.empty()) {
- // append application service information
- uri += appService;
- }
- LogDebug("Will load resource: " << *found);
- LogDebug("uri " << uri);
- // we mustn't free memory under resourceRequest->url
- request->url = strdup(uri.c_str());
- return true;
- }
-
- LogDebug("Path not found within current locale in current widget");
- return false;
-}
-
-bool ViewLogic::checkACE(Ewk_Frame_Resource_Request *request)
-{
- using namespace ViewModule::SecuritySupport;
-
- WidgetModel *model = m_widgetView->m_widgetModel;
-
- if (request->url) {
- for (size_t i = 0; ACE_IGNORED_SCHEMA[i]; ++i) {
- if (0 == strncmp(request->url,
- ACE_IGNORED_SCHEMA[i],
- strlen(ACE_IGNORED_SCHEMA[i])))
- {
- return true;
- }
- }
- }
-
- const char *devCapNamesMarkup[] = {"externalNetworkAccess"};
- const char *devCapNamesXHR[] = {"XMLHttpRequest"};
-
- AceClient::AceRequest aceRequest;
-
- aceRequest.widgetHandle = model->Handle.Get();
-
- // TODO! We should get session id from somewhere (outside Widget Process)
- AceClient::AceSessionId session;
-
- aceRequest.sessionId = session;
-
- if (request->requester_is_script) {
- aceRequest.deviceCapabilities.devcapsCount =
- sizeof(devCapNamesXHR)/sizeof(devCapNamesXHR[0]);
- aceRequest.deviceCapabilities.devCapNames = devCapNamesXHR;
- } else {
- aceRequest.deviceCapabilities.devcapsCount =
- sizeof(devCapNamesMarkup)/sizeof(devCapNamesMarkup[0]);
- aceRequest.deviceCapabilities.devCapNames = devCapNamesMarkup;
- }
-
- AceClient::AceParam aceParams[] =
- {AceClient::AceParam(PARAM_URL, request->url)};
-
- AceClient::AceParamList aceParamList;
- aceParamList.count = sizeof(aceParams)/sizeof(aceParams[0]);
- aceParamList.param = aceParams;
- aceRequest.deviceCapabilities.params = &aceParamList;
-
- LogInfo("Pausing widget");
- ewk_view_javascript_suspend(EVAS_WEBVIEW(m_widgetView));
-
- bool result =
- AceClient::AceThinClientSingleton::Instance().
- checkFunctionCall(aceRequest);
-
- LogInfo("Resuming widget");
- ewk_view_javascript_resume(EVAS_WEBVIEW(m_widgetView));
-
- return result;
-}
-
-void ViewLogic::setSelectiveRendering(Evas_Object *webview,
- Eina_Bool setValue)
-{
- if (ewk_view_selective_rendering_is_enabled(webview) != setValue) {
- ewk_view_selective_rendering_set(webview, setValue);
- }
-}
-
-void ViewLogic::doContentResize(WidgetViewDataStruct* widgetView)
-{
- int w, h;
- ewk_frame_contents_size_get(EVAS_WEBVIEW_FRAME(widgetView), &w, &h);
-
- WidgetModel *widgetModel = widgetView->m_widgetModel;
-
- widgetModel->ActualSize.Set(WidgetSize(w, h));
-}
-
-void ViewLogic::setViewMode(WidgetViewDataStruct* widgetView)
-{
- LogDebug("SetViewMode");
-
- WidgetModel *widgetModel = widgetView->m_widgetModel;
- WrtDB::WindowModeList windowModes = widgetModel->WindowModes.Get();
-
- FOREACH(it, windowModes)
- {
- LogDebug("Window mode : " << (*it));
-
- std::string viewMode = DPL::ToUTF8String(*it);
-
- // If there is unsupported view-mode,
- // set to default view-mode, EWK_VIEW_MODE_MAXIMIZED.
- if (viewMode == VIEWMODE_TYPE_FULLSCREEN) {
- widgetView->m_viewMode = EWK_VIEW_MODE_FULLSCREEN;
- return;
- } else if (viewMode == VIEWMODE_TYPE_MAXIMIZED) {
- widgetView->m_viewMode = EWK_VIEW_MODE_MAXIMIZED;
- return;
- } else {
- LogError("Unknown Window mode passed: " << viewMode);
- }
- }
-
- LogDebug("Set default view-mode");
- widgetView->m_viewMode = EWK_VIEW_MODE_MAXIMIZED;
-
- return;
-}
-
-#ifdef USE_DNET
-void ViewLogic::netOpenRsrcRequestCallback(void *data,
- int status)
-{
- if (status == 0) {
- LogInfo("[NET] Network opened successfully.");
- } else {
- LogInfo("[NET] Failed to open network.");
- }
-
- WidgetViewDataStruct *widgetView =
- static_cast<WidgetViewDataStruct *>(data);
-
- if (widgetView->m_firstPageLoaded == false) {
- LogInfo("[NET] open rsrc request callback... load uri!!!");
- elm_webview_uri_set(EVAS_ELM_WEBVIEW(widgetView),
- widgetView->m_currentUri.c_str());
- ewk_view_reload(EVAS_WEBVIEW(widgetView));
- widgetView->m_firstPageLoaded = true;
- } else {
- ewk_view_javascript_resume(EVAS_WEBVIEW(widgetView));
- ewk_view_resume_request(EVAS_WEBVIEW(widgetView));
- }
-}
-#endif
-
-void ViewLogic::setDebugMode(WidgetViewDataStruct *view,
- const WidgetLaunchStruct& widgetLaunchStruct)
-{
- LogDebug("Connecting to ViewModule Debugger Support");
- Assert(view && "Passed view is NULL!");
-
- ApiCallbacksTranslate::APIWidgetLaunchStruct *userParam_temp =
- static_cast<ApiCallbacksTranslate::APIWidgetLaunchStruct*>
- (widgetLaunchStruct.userParam);
- WrtClientUserData *userData = static_cast<WrtClientUserData*>
- (userParam_temp->userdata);
-
- bool debugMode = userData->debugMode;
-
- LogInfo("[DEBUG_MODE] Widget is launched in " <<
- (debugMode ? "DEBUG" : "RETAIL") <<
- " mode.");
-
- if (debugMode == true) {
- // In WAC widget, only test widgets can use web inspector.
- // In TIZEN widget,
- // every launched widgets as debug mode can use it.
- if (view->m_widgetModel->Type.Get().appType ==
- WrtDB::APP_TYPE_WAC20 ||
- view->m_widgetModel->Type.Get().appType ==
- WrtDB::APP_TYPE_WAC10)
- {
- bool developerMode =
- GlobalLogicSingleton::Instance().GetGlobalModel()
- ->DeveloperMode.Get();
- //This code will be activated
- //after WAC test certificate is used by SDK
- //bool isTestWidget = view->m_widgetModel->IsTestWidget.Get();
- //if(!isTestWidget)
- //{
- // LogInfo("This is not WAC Test Widget");
- // break;
- //}
- if (!developerMode) {
- LogInfo("This is not WAC Developer Mode");
- return;
- }
- }
-
- userData->portnum = ewk_view_inspector_server_start(0);
- if (userData->portnum == 0) {
- LogWarning("Failed to get portnum");
- } else {
- LogInfo("Assigned port number for inspector : "
- << userData->portnum);
- }
- }
-}
-
-void ViewLogic::windowClose(WidgetViewDataStruct* widgetView)
-{
- LogDebug("windowClose called");
-
- if (1 >= widgetView->m_evasStructList.size()) {
- if (widgetView && widgetView->m_viewLogic) {
- LogInfo("Calling temrinate!");
- wrt_shutdown();
- } else {
- LogError("Required object not found! Could not call terminate function!");
- }
- elm_exit();
- } else {
- // disable evas view
- evas_object_hide(EVAS_WEBVIEW(widgetView));
- widgetView->m_windowData->unsetEvasObjectForLayout();
-
- widgetView->m_viewLogic->removeWebview(widgetView);
- widgetView->m_viewLogic->resumeWebview(widgetView);
-
- // Show previous webview
- evas_object_show(EVAS_ELM_WEBVIEW(widgetView));
- widgetView->m_windowData->setEvasObjectForLayout(
- EVAS_ELM_WEBVIEW(widgetView));
- }
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for view logic for EFL
- */
-#ifndef VIEW_LOGIC_H
-#define VIEW_LOGIC_H
-
-#include <map>
-#include <string>
-#include <memory>
-
-#include <dpl/singleton.h>
-
-#include <framework_efl.h>
-#include <framework_ewebkit.h>
-#include <widget_model.h>
-#include <widget_launch_struct.h>
-#include <dpl/wrt-dao-rw/property_dao.h>
-#include "evas_object.h"
-
-#include <widget_view.h>
-
-namespace ViewModule {
-class AppsSupport;
-} //Forward declarations
-
-// TODO rename it to View::Logic
-class ViewLogic : private DPL::Noncopyable
-{
- public:
- virtual ~ViewLogic();
-
- void initialize();
- void terminate();
-
- void prepareView(WidgetModel* widgetModel,
- const WidgetLaunchStruct& launchStruct);
-
- /**
- * This method is show widget's webkit
- * @param[in] widgetModel widgetData
- * @param[in] launchstruct
- * @return none
- */
- void showWidget(WidgetModel *widgetModel,
- const WidgetLaunchStruct &launchStruct);
-
- /**
- * This method is used to hide widget (by disabling webkit)
- * @param[in] widgetModel widgetData
- * @return none
- */
- void hideWidget(WidgetModel *widgetModel);
-
- /**
- * This method is used to suspend widget (by suspending javascript)
- * @param[in] widgetModel widgetData
- * @return none
- */
- void suspendWidget(WidgetModel *widgetModel,
- const OperationStatusStruct &operationStatus);
-
- /**
- * This method is used to resume widget (by resuming javascript)
- * @param[in] widgetModel widgetData
- * @return none
- */
- void resumeWidget(WidgetModel *widgetModel,
- const OperationStatusStruct &operationStatus);
-
- void widgetWebkitReset(WidgetModel *widgetModel,
- std::string bundleData);
-
- /**
- * This method returns UserAgent value
- * @param[in] widgetModel widgetData
- * @return UserAgent value
- */
- std::string getWidgetUAValue(WidgetModel *widgetModel);
-
- //FIXME THESE FUNCTIONS SHOULD BE REMOVED WHEN
- //plugin_api.cpp::plugin_api_check_access(..) function will be removed
- // (this function is DEPRECATED)
- void javaScriptSuspend(WidgetModel *widgetModel);
- void javaScriptResume(WidgetModel *widgetModel);
-
- EvasObject getViewForHandle(WidgetHandle handle) const;
-
- private:
- WidgetViewDataStruct* m_widgetView;
-
- void prepareWebview(WidgetViewDataStruct* widgetView);
- void createWebview(WidgetViewDataStruct* widgetView);
- void removeWebview(WidgetViewDataStruct* widgetView);
- void resumeWebview(WidgetViewDataStruct* widgetView);
- void suspendWebview(WidgetViewDataStruct* widgetView);
-
- void resumeWebkit(WidgetViewDataStruct* widgetView);
- void suspendWebkit(WidgetViewDataStruct* widgetView);
-
- WidgetViewDataStruct *findWidgetView(WidgetModel* model) const;
- WidgetViewDataStruct *findWidgetViewForHandle(WidgetHandle widgetHandle)
- const;
-
- // Callback
- void connectCallbacks(WidgetModel *widgetModel,
- const WidgetLaunchStruct &widgetLaunchStruct);
- void disconnectCallbacks(WidgetModel *widgetModel);
- void connectViewCallbacks(
- WidgetViewDataStruct *widgetView,
- EvasStruct* evasStruct);
- void disconnectViewCallbacks(
- WidgetViewDataStruct *widgetView,
- EvasStruct* evasStruct);
-
- // window callback
- static void backKeyCallback(
- void *data,
- Evas_Object * obj,
- void* event_info);
- static void resizeUserlayoutCallback(
- void* data,
- Evas* evas,
- Evas_Object* userLayout,
- void* event_info);
-
- // Key
- static Eina_Bool keydownEvent(
- void *data,
- int type,
- void *event);
- static Eina_Bool keyupEvent(
- void *data,
- int type,
- void *event);
-
- // ewk callback
- static void startedCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WrtDB::WidgetType widgetType,
- WidgetViewDataStruct* widgetView);
- static void progressCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void finishedCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetLaunchStruct* widgetLaunchStruct,
- WidgetViewDataStruct* widgetView);
- static void uriChangedCallback(//TODO This will be also moved to UriSupport
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void linkHoverInCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void linkHoverOutCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void webviewResizeCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void createWebviewCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void windowCloseCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void shouldAllowOpenCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void frameCreatedCallback(
- EvasObject::IConnection *conn,
- void *event_info,
- WidgetViewDataStruct *widgetView);
- static void oneSingleTapCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void downloadRequestCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void html5VideoRequestCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
-
- // ewk frame callback
- static void contentResizeCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void resourceRequestWillSendCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void submitClickedCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
-
- // elm-webview callback
- static void panningStartedCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static void panningFinishedCallback(
- EvasObject::IConnection* conn,
- void* event_info,
- WidgetViewDataStruct* widgetView);
- static Eina_Bool schemeCallback(
- Evas_Object* o,
- const char* uri);
-
- // timer callback
- static Eina_Bool progressTimerCallback(void* data);
- static Eina_Bool suspendTimerCallback(void* data);
-
- // idler callback
- static Eina_Bool setLayoutIdlerCallback(void* data);
- static Eina_Bool windowCloseIdlerCallback(void* data);
-
- // Combo box
- void setCombobox(
- Evas_Object* object,
- void *event_info,
- WidgetViewDataStruct* widgetView);
- static void comboboxResponseCallback(
- int selected_index,
- void* userdata);
-
- // security
- void resourceRequestWillSend(
- Ewk_Frame_Resource_Request* resourceRequest);
- void blockRequest(
- Ewk_Frame_Resource_Request *resourceRequest,
- bool allocated,
- const char *uriMessage,
- bool securityError = false);
- bool localizeURL(Ewk_Frame_Resource_Request *request);
- bool checkACE(Ewk_Frame_Resource_Request *request);
-
- // rendering
- void setSelectiveRendering(Evas_Object *webview,
- Eina_Bool setValue);
- void doContentResize(WidgetViewDataStruct* widgetView);
- void setViewMode(WidgetViewDataStruct* widgetView);
-
- // network
-#ifdef USE_DNET
- static void netOpenRsrcRequestCallback(void *data,
- int status);
-#endif
-
- // Debug
- void setDebugMode(WidgetViewDataStruct *view,
- const WidgetLaunchStruct& widgetLaunchStruct);
-
- // window
- void windowClose(WidgetViewDataStruct* widgetView);
-
- private:
- ViewLogic();
-
- friend class DPL::Singleton<ViewLogic>;
-
- std::unique_ptr<ViewModule::AppsSupport> m_appsSupport;
-};
-
-typedef DPL::Singleton<ViewLogic> ViewLogicSingleton;
-
-#endif // VIEW_LOGIC_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_apps_support.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Implementation file of AppsSupport class used by ViewLogic
- */
-
-#include "view_logic_apps_support.h"
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-#include <application_launcher.h>
-#include <appsvc.h>
-#include <widget_model.h>
-
-namespace ViewModule
-{
-
-namespace
-{//anonymous
-const char *SCHEME_TYPE_HTML5_VIDEO = "html5video";
-}
-
-//Implementation class
-class AppsSupportImplementation
-{
-private:
- WidgetModel *m_widgetModel;
- bool m_initialized;
-
- struct HTML5Video {
- const char* path;
- const char* cookie;
- };
-
-public:
- AppsSupportImplementation() :
- m_widgetModel(NULL),
- m_initialized(false)
- {
- }
-
- ~AppsSupportImplementation()
- {
- Assert(!m_initialized &&
- "AppsSupport has to be deinitialized prior destroying!");
- }
-
- void initialize(WidgetModel *widgetModel)
- {
- Assert(!m_initialized && "Already initialized!");
-
- LogDebug("Initializing Apps Support");
- Assert(widgetModel && "Passed widgetModel is NULL!");
- m_widgetModel = widgetModel;
-
- ApplicationLauncherSingleton::Instance().setWidgetHandle(
- m_widgetModel->Handle.Get());
-
- LogDebug("Initialized");
- m_initialized = true;
- }
-
- void deinitialize()
- {
- Assert(m_initialized && "Not initialized!");
- LogDebug("Deinitialized");
- m_widgetModel = NULL;
- m_initialized = false;
- }
-
- bool httpMultimediaRequest(std::string mimeType, std::string uri)
- {
- LogInfo("httpMultimediaRequest called");
-
- if ("null" == mimeType || "null" == uri) {
- LogError("uri/mimeType is null");
- return false;
- }
-
- bundle *args = NULL;
- args = bundle_create();
- void *userData = NULL;
- appsvc_res_fn responseCallback = NULL;
-
- // ignore case match of string of mime type
- // if needed, define appsvc response callback and its user data per mimetype
- if(!strcasecmp(mimeType.c_str(), HTTP_STREAMING_APPLE_MIMETYPE) ||
- !strcasecmp(mimeType.c_str(), HTTP_STREAMING_MPEG_MIMETYPE))
- {
- appsvc_set_operation(args, APPSVC_OPERATION_VIEW);
- appsvc_set_mime(args, mimeType.c_str());
- appsvc_set_uri(args, uri.c_str());
- } else {
- LogInfo("Not Supported MIME type in WRT");
- return false;
- }
-
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByAppService(
- args,
- responseCallback,
- userData));
-
- return true;
- }
-
- void downloadRequest(const char *url,
- const char *mimeType,
- const char *userParam)
- {
- LogInfo("Download info : " << url << "(" <<
- mimeType << ", " << userParam <<")");
-
- // ignore case match of string of mime type
- int isAppServiceable = httpMultimediaRequest(
- mimeType ? std::string(mimeType) : "null",
- url ? std::string(url) : "null");
-
- if(isAppServiceable)
- {
- LogInfo("Application Service start");
- return;
- }
-
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByPkgname(
- ApplicationLauncherPkgname::PKG_NAME_DOWNLOAD_PROVIDER,
- url ? std::string(url) : "null",
- mimeType ? mimeType : "null",
- userParam ? userParam : "null"));
- }
-
- void html5VideoRequest(void* event_info)
- {
- LogInfo("html5VideoRequestCallback called");
- Assert(event_info);
- HTML5Video* video = static_cast<HTML5Video*>(event_info);
-
- LogDebug("video->path : " << video->path);
- LogDebug("video->cookie : " << video->cookie);
- if (NULL == video->path) {
- LogError("path is null");
- return;
- }
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByPkgname(
- ApplicationLauncherPkgname::PKG_NAME_VIDEO_PLAYER,
- SCHEME_TYPE_HTML5_VIDEO,
- video->path ? video->path : "null",
- video->cookie ? video->cookie : "null"));
- }
-};
-
-AppsSupport::AppsSupport(): m_impl(new AppsSupportImplementation)
-{
-}
-
-AppsSupport::~AppsSupport()
-{
-}
-
-void AppsSupport::initialize(WidgetModel *widgetModel)
-{
- m_impl->initialize(widgetModel);
-}
-
-void AppsSupport::deinitialize()
-{
- m_impl->deinitialize();
-}
-
-void AppsSupport::html5VideoRequest(void* event_info)
-{
- m_impl->html5VideoRequest(event_info);
-}
-
-void AppsSupport::downloadRequest(const char *url,
- const char *mimeType,
- const char *userParam)
-{
- m_impl->downloadRequest(url, mimeType, userParam);
-}
-
-}//namespace
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_apps_support.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Header file of AppsSupport class used by ViewLogic
- */
-
-#ifndef VIEW_LOGIC_APPS_SUPPORT_H_
-#define VIEW_LOGIC_APPS_SUPPORT_H_
-
-#include <memory>
-#include <string>
-#include <widget_model.h>
-
-#define HTTP_STREAMING_APPLE_MIMETYPE "application/vnd.apple.mpegurl"
-#define HTTP_STREAMING_MPEG_MIMETYPE "application/x-mpegurl"
-
-namespace ViewModule
-{
-
-class AppsSupportImplementation; //Forward declaration
-
-class AppsSupport
-{
-public:
- AppsSupport();
- virtual ~AppsSupport();
-
- void initialize(WidgetModel *);
- void deinitialize();
- void html5VideoRequest(void* event_info);
- void downloadRequest(
- const char *url,
- const char *mimeType,
- const char *userParam);
-
-private:
- std::unique_ptr<AppsSupportImplementation> m_impl;
-};
-
-} //namespace
-
-#endif /* VIEW_LOGIC_APPS_SUPPORT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_keys_support.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Implementation file of KeySupport API used by ViewLogic
- */
-
-#include "view_logic_keys_support.h"
-
-namespace ViewModule {
-namespace KeysSupport {
-
-} // namespace ViewModule
-} // namespace KeysSupport
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_keys_support.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Header file of KeySupport API used by ViewLogic
- */
-
-#ifndef VIEW_LOGIC_KEYS_SUPPORT_H_
-#define VIEW_LOGIC_KEYS_SUPPORT_H_
-
-#include <Ecore_Evas.h>
-
-namespace ViewModule {
-namespace KeysSupport {
-
-char const * const WinKeyEvent = "WinKeyDown";
-char const * const KEYS_END = "XF86Stop";
-char const * const KEY_WEBKIT_RETURN = "Escape";
-
-template<typename T>
-T getEvasFromEcoreKey(Evas *e, Ecore_Event_Key *ecore_ev)
-{
- T ev = T();
-
- ev.dev = NULL;
- ev.keyname = const_cast<char*>(KEY_WEBKIT_RETURN);
- ev.data = NULL;
- ev.modifiers = const_cast<Evas_Modifier*>(evas_key_modifier_get(e));
- ev.locks = const_cast<Evas_Lock*>(evas_key_lock_get(e));
- ev.key = KEY_WEBKIT_RETURN; //ecore_ev->key;
- ev.string = ecore_ev->string;
- ev.compose = ecore_ev->compose;
- ev.timestamp = ecore_ev->timestamp;
- ev.event_flags = EVAS_EVENT_FLAG_NONE;
-
- return ev;
-};
-
-} // namespace KeysSupport
-} // namespace ViewModule
-
-#endif /* VIEW_LOGIC_KEYS_SUPPORT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_password_support.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Implementation file of PasswordSupport API used by ViewLogic
- */
-#include "view_logic_password_support.h"
-#include <string>
-#include <vconf.h>
-#include <iri.h>
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-#include <dpl/scoped_ptr.h>
-#include <dpl/string.h>
-#include <dpl/optional.h>
-#include <AutoSavePopup.h>
-#include <dpl/wrt-dao-rw/global_dao.h>
-
-namespace ViewModule {
-namespace PasswordSupport {
-
-namespace
-{ //anonymous
-const char *AUTOSAVEIDPASS_OFF = "Off";
-const char *AUTOSAVEIDPASS_ON = "On";
-const char *AUTOSAVEIDPASS_ALWAYS_ASK = "Always ask";
-const std::string SETTING_VCONF_PREFIX = "db/browsersetting/";
-const std::string AUTOSAVEIDPASS_KEY =
-SETTING_VCONF_PREFIX + "AutoSaveIDPassword";
-}
-
-DPL::Optional<WrtDB::GlobalDAOReadOnly::AutoSaveData>
- getAutoFillData(const char *uri)
-{
- LogDebug("getAutoFillData called");
- using namespace WrtDB;
-
- Assert(uri);
- const char* const autoSaveIDPass =
- vconf_get_str(AUTOSAVEIDPASS_KEY.c_str());
- DPL::Optional<GlobalDAO::AutoSaveData> autoData;
-
- if (NULL == autoSaveIDPass) {
- LogDebug("Did not find vconf about AUTOSAVEIDPASS_KEY ");
- } else if (strcmp(autoSaveIDPass, AUTOSAVEIDPASS_OFF)) {
- DPL::ScopedPtr<iri_t> iri(
- iri_parse(uri));
-
- if (iri.Get() && NULL != iri->host) {
- autoData = GlobalDAO::GetAutoSaveIdPasswd(
- DPL::FromASCIIString(std::string(iri->host)));
- }
- }
- return autoData;
-}
-
-void submitClicked(char ** personalData)
-{
- LogDebug("submitClicked called");
- Assert(personalData);
-
- using namespace WrtDB;
-
- const char* autoSaveStatus = vconf_get_str(AUTOSAVEIDPASS_KEY.c_str());
-
- Assert(autoSaveStatus);
- Assert(personalData[0] && personalData[1] && personalData[2]);
-
- std::string userId = personalData[0];
- std::string userPasswd = personalData[1];
- std::string currentUri = personalData[2];
-
- if (!strcmp(autoSaveStatus, AUTOSAVEIDPASS_OFF)) {
- LogDebug("AutoSaveStatus is AUTOSAVEIDPASS_ALWAYS_OFF");
- return;
- } else if (!strcmp(autoSaveStatus, AUTOSAVEIDPASS_ON)) {
- LogDebug("AutoSaveStatus is AUTOSAVEIDPASS_ALWAYS_ON");
- GlobalDAO::AutoSaveData saveData;
- saveData.userId = DPL::FromUTF8String(userId);
- saveData.passwd = DPL::FromUTF8String(userPasswd);
- DPL::ScopedPtr<iri_t> iri(iri_parse(currentUri.c_str()));
- if (iri.Get() && NULL != iri->host) {
- GlobalDAO::SetAutoSaveIdPasswd(
- DPL::FromASCIIString(std::string(iri->host)), saveData);
- }
- } else if (!strcmp(autoSaveStatus, AUTOSAVEIDPASS_ALWAYS_ASK)) {
- LogDebug("AutoSaveStatus is AUTOSAVEIDPASS_ALWAYS_ASK");
- DPL::Optional<GlobalDAO::AutoSaveData> autoData;
- DPL::ScopedPtr<iri_t> iri(iri_parse(currentUri.c_str()));
- if (iri.Get() && NULL != iri->host) {
- DPL::String host = DPL::FromASCIIString(std::string(iri->host));
- autoData = GlobalDAO::GetAutoSaveIdPasswd(host);
- if (!autoData.IsNull()) {
- std::string tempid = DPL::ToUTF8String(autoData->userId);
- std::string temppass = DPL::ToUTF8String(autoData->passwd);
-
- if (!userId.compare(tempid) &&
- !userPasswd.compare(temppass))
- {
- return;
- }
- }
- GlobalDAO::AutoSaveData saveData;
- saveData.userId = DPL::FromUTF8String(userId);
- saveData.passwd = DPL::FromUTF8String(userPasswd);
-
- DPL::ScopedPtr<AutoSavePopup> autoPopup(new AutoSavePopup);
- autoPopup->checkAutoSave(host, saveData);
- }
- }
-}
-
-} // namespaec PasswordSupport
-} // namespaec ViewModule
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_password_support.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Header file of PasswordSupport API used by ViewLogic
- */
-
-#ifndef VIEW_LOGIC_PASSWORD_SUPPORT_H_
-#define VIEW_LOGIC_PASSWORD_SUPPORT_H_
-
-#include <dpl/wrt-dao-ro/global_dao_read_only.h>
-
-namespace ViewModule {
-namespace PasswordSupport {
-
-DPL::Optional<WrtDB::GlobalDAOReadOnly::AutoSaveData>
- getAutoFillData(const char *url);
-void submitClicked(char ** personalData);
-
-} // namespace PasswordSupport
-} // namespace ViewModule
-
-#endif /* VIEW_LOGIC_PASSWORD_SUPPORT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_scheme_support.cpp
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Implementation file for scheme handler
- */
-
-#include "view_logic_scheme_support.h"
-#include <string>
-#include <dpl/generic_event.h>
-#include <dpl/log/log.h>
-#include <dpl/assert.h>
-
-#include <application_launcher.h>
-#include <evas_object.h>
-#include <widget_model.h>
-
-namespace ViewModule {
-namespace SchemeSupport {
-
-bool handleURIByScheme(const char *scheme,
- const char* uri)
-{
- if (!uri || !scheme) {
- LogError("schemeHandleByUri -wrong arguments passed");
- return false;
- }
- LogDebug("scheme = [" << scheme << "]");
- LogDebug("uri = [" << uri << "]");
-
- switch (scheme[0]) {
- case 'w': {
- if (scheme == SCHEME_TYPE_WIDGET) {
- return true;
- }
- break; }
- case 'h': {
- // For blocking launch browser in scheme callback.
- // "_target" tag call the 'should,allow,open' callback.
- if (scheme == SCHEME_TYPE_HTTP) {
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByURI(
- DPL::FromUTF8String(uri)));
- return false;
- } else if (scheme == SCHEME_TYPE_HTTPS) {
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByURI(
- DPL::FromUTF8String(uri)));
- return false;
- }
- break; }
- case 'f': {
- if (scheme == SCHEME_TYPE_FILE) {
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByURI(
- DPL::FromUTF8String(uri)));
- return false;
- }
- break; }
- case 't': {
- if (scheme == SCHEME_TYPE_TEL) {
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByURI(
- DPL::FromUTF8String(uri)));
- return false;
- }
- break; }
- case 'm': {
- if (scheme == SCHEME_TYPE_MMSTO || scheme == SCHEME_TYPE_MAILTO) {
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByURI(
- DPL::FromUTF8String(uri)));
- return false;
- }
- break; }
- case 's': {
- if (scheme == SCHEME_TYPE_SMS) {
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByURI(
- DPL::FromUTF8String(uri)));
- return false;
- }
- break; }
- case 'd': {
- if (scheme == SCHEME_TYPE_DATA) {
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByURI(
- DPL::FromUTF8String(uri)));
- return false;
- }
- break; }
- case 'v': {
- if (scheme == SCHEME_TYPE_YOUTUBE) {
- std::string youtubeUri = uri;
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByPkgname(
- ApplicationLauncherPkgname::PKG_NAME_VIDEO_PLAYER,
- scheme,
- youtubeUri,
- "null"));
- return false;
- }
- break; }
- case 'r': {
- if (scheme == SCHEME_TYPE_RTSP) {
- std::string youtubeUri = uri;
- LogDebug("scheme: " << scheme);
- LogDebug("youtubeUri: " << youtubeUri);
- CONTROLLER_POST_EVENT(
- ApplicationLauncher,
- ApplicationLauncherEvents::LaunchApplicationByPkgname(
- ApplicationLauncherPkgname::PKG_NAME_VIDEO_PLAYER,
- scheme,
- youtubeUri,
- "null"));
- return false;
- }
- break; }
- default:
- LogError("Unknown scheme passed: " << scheme);
- Assert(false && "Unknown scheme passed");
- return false;
- }
-
- LogError("Unknown scheme passed: " << scheme);
- Assert(false && "Unknown scheme passed");
- return false;
-}
-
-Eina_Bool elmSchemeHandle(const char* uri)
-{
- if (!uri) {
- LogError("ElmWebview callback - wrong arguments passed");
- return EINA_FALSE;
- }
- LogDebug("Scheme being checked: " << uri);
-
- const char *end = strstr(uri, ":");
- if (!end) {
- LogError("Lack of scheme - ignoring");
- return EINA_FALSE;
- }
- std::string scheme(uri, end);
-
- switch (scheme[0]) {
- case 'w': {
- if (scheme == SCHEME_TYPE_WIDGET) {
- return EINA_TRUE;
- }
- break; }
- case 'h': {
- // For blocking launch browser in scheme callback.
- // "_target" tag call the 'should,allow,open' callback.
- if (scheme == SCHEME_TYPE_HTTP) {
- return EINA_TRUE;
- } else if (scheme == SCHEME_TYPE_HTTPS) {
- return EINA_TRUE;
- }
- break; }
- case 'f': {
- if (scheme == SCHEME_TYPE_FILE) {
- return EINA_TRUE;
- }
- break; }
- case 't': {
- if (scheme == SCHEME_TYPE_TEL) {
- if(handleURIByScheme(scheme.c_str(), uri)) {
- return EINA_TRUE;
- } else {
- return EINA_FALSE;
- }
- }
- break; }
- case 'm': {
- if (scheme == SCHEME_TYPE_MMSTO || scheme == SCHEME_TYPE_MAILTO) {
- if(handleURIByScheme(scheme.c_str(), uri)) {
- return EINA_TRUE;
- } else {
- return EINA_FALSE;
- }
- }
- break; }
- case 's': {
- if (scheme == SCHEME_TYPE_SMS) {
- if(handleURIByScheme(scheme.c_str(), uri)) {
- return EINA_TRUE;
- } else {
- return EINA_FALSE;
- }
- }
- break; }
- case 'd': {
- if (scheme == SCHEME_TYPE_DATA) {
- if(handleURIByScheme(scheme.c_str(), uri)) {
- return EINA_TRUE;
- } else {
- return EINA_FALSE;
- }
- }
- break; }
- case 'v': {
- if (scheme == SCHEME_TYPE_YOUTUBE) {
- std::string youtubeUri = uri;
- if(handleURIByScheme(scheme.c_str(), uri)) {
- return EINA_TRUE;
- } else {
- return EINA_FALSE;
- }
- }
- break; }
- case 'r': {
- if (scheme == SCHEME_TYPE_RTSP) {
- std::string youtubeUri = uri;
- if(handleURIByScheme(scheme.c_str(), uri)) {
- return EINA_TRUE;
- } else {
- return EINA_FALSE;
- }
- }
- break; }
- default:
- LogError("Unknown scheme passed: " << scheme);
- Assert(false && "Unknown scheme passed");
- return EINA_FALSE;
- }
-
- LogError("Unknown scheme passed: " << scheme);
- Assert(false && "Unknown scheme passed");
- return EINA_FALSE;
-}
-
-Eina_Bool shouldAllowOpen(const char* uri, WidgetModel *widgetModel)
-{
- if (widgetModel->Type.Get().appType
- == WrtDB::APP_TYPE_TIZENWEBAPP)
- {
- // Multi window is supported by tizen web app
- return EINA_TRUE;
- } else {
- // WS-1502
- // If new window shall be opended with target = _blank and scheme is http/s
- // then we shall forward this request to external browser
- if (strstr(uri, SCHEME_TYPE_HTTP) == uri) {
- if(handleURIByScheme(SCHEME_TYPE_HTTP, uri)) {
- return EINA_TRUE;
- } else {
- return EINA_FALSE;
- }
- } else if (strstr(uri, SCHEME_TYPE_HTTPS) == uri) {
- if(handleURIByScheme(SCHEME_TYPE_HTTPS, uri)) {
- return EINA_TRUE;
- } else {
- return EINA_FALSE;
- }
- } else {
- return EINA_TRUE;
- }
- }
- return EINA_TRUE;
-}
-
-} // namespace SchemeSupport
-} // namespace ViewModule
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_scheme_support.h
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Header file for scheme handler
- */
-
-#ifndef WRT_SRC_DOMAIN_SCHEME_SUPPORT_H
-#define WRT_SRC_DOMAIN_SCHEME_SUPPORT_H
-
-#include <evas_object.h>
-#include <widget_model.h>
-
-namespace ViewModule {
-namespace SchemeSupport {
-
-char const * const SCHEME_TYPE_FILE = "file";
-char const * const SCHEME_TYPE_SMS = "sms";
-char const * const SCHEME_TYPE_MMSTO = "mmsto";
-char const * const SCHEME_TYPE_MAILTO = "mailto";
-char const * const SCHEME_TYPE_DATA = "data";
-char const * const SCHEME_TYPE_TEL = "tel";
-char const * const SCHEME_TYPE_HTTP = "http";
-char const * const SCHEME_TYPE_HTTPS = "https";
-char const * const SCHEME_TYPE_WIDGET = "widget";
-char const * const SCHEME_TYPE_YOUTUBE = "vnd.youtube";
-char const * const SCHEME_TYPE_RTSP = "rtsp";
-
-bool handleURIByScheme(const char *scheme, const char* uri);
-Eina_Bool elmSchemeHandle(const char* uri);
-Eina_Bool shouldAllowOpen(const char* uri, WidgetModel *widgetModel);
-
-} // namespace SchemeSupport
-} // namespace ViewModule
-
-#endif //WRT_SRC_DOMAIN_SCHEME_HANDLER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_keys_support.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Implementation file of SecuritySupport API used by ViewLogic
- */
-
-#include "view_logic_security_support.h"
-#include <string>
-#include <dpl/log/log.h>
-#include <dpl/wrt-dao-ro/global_dao_read_only.h>
-
-#include <widget_model.h>
-#include <child_protection_agent.h>
-
-namespace ViewModule {
-namespace SecuritySupport {
-
-namespace {
-const char *SCHEME_TYPE_HTTP = "http";
-const char *SCHEME_TYPE_HTTPS = "https";
-} //TODO copied from view_logic.cpp
-
-bool checkWARP(const char *url, WidgetModel *widgetModel)
-{
- const char *val = getenv("DISABLE_WARP");
- if (val != NULL && strcmp(val, "1") == 0) {
- return true;
- }
-
- if (WarpIRI::isIRISchemaIgnored(url)) {
- // scheme is not supported by WARP
- return true;
- }
-
- // access tag in config.xml file is mandatory in wac 1.0
- // if (model->Standard.Get() == WidgetStandard_Wac10) {
- // LogError("Widget wac 1.0");
- // access tag was set to false - access to network is forbidden
- // if (model->AccessNetwork.Get() == false) { return false; }
- //
- // // access tag was set to true and no warp definition was found
- // if (model->WarpDefinitionEmpty.Get()) { return true; }
- // }
- return widgetModel->AccessList.Get().isRequiredIRI(
- DPL::FromUTF8String(std::string(url)));
-}
-
-bool checkWhitelist(const char *url)
-{
- LogInfo("Check WhiteList");
- // White List should be checked in only case of Tizen widget
- if (WarpIRI::isIRISchemaIgnored(url)) {
- // scheme is not supported by WARP
- return true;
- }
-
- WidgetAccessList whiteURIList(WrtDB::GlobalDAOReadOnly::GetWhiteURIList());
- return whiteURIList.isRequiredIRI(DPL::FromUTF8String(std::string(url)));
-}
-
-bool checkChildProtection(const char *url, WidgetModel *widgetModel)
-{
- ChildProtection::Logic& instance =
- ChildProtection::LogicSingleton::Instance();
- return !(instance.IsParentalModeActive() &&
- instance.IsEnabledFiltering(widgetModel) &&
- instance.IsUriForbidden(widgetModel, url));
-}
-
-bool checkUriRequiredNet(const std::string &uri)
-{
- if (strstr(uri.c_str(), SCHEME_TYPE_HTTP) == uri.c_str() ||
- strstr(uri.c_str(), SCHEME_TYPE_HTTPS) == uri.c_str())
- {
- return true;
- } else {
- return false;
- }
-}
-
-} // namespace SecuritySupport
-} //namespace ViewModule
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_security_support.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Header file of SecuritySupport API used by ViewLogic
- */
-
-#ifndef VIEW_LOGIC_SECURITY_SUPPORT_H_
-#define VIEW_LOGIC_SECURITY_SUPPORT_H_
-
-#include <widget_model.h>
-
-namespace ViewModule {
-namespace SecuritySupport {
-
-char const * const WARP_ERROR_MSG =
- "file:///usr/etc/wrt/warp_security_error.msg";
-//char const * const ROAMING_ERROR_MSG = "file:///usr/etc/wrt/roaming_error.msg";
-char const * const WITHOUT_NETWORK_SCHEMA[] = { "file://", "widget://", "data:", 0 };
-char const * const PARAM_URL = "param:url";
-char const * const ACE_IGNORED_SCHEMA[] = { "file://", "widget://", "data:",
- "tel:", "sms:", "mmsto:", "mailto:", 0 };
-
-bool checkWARP(const char *url, WidgetModel *widgetModel);
-bool checkWhitelist(const char *url);
-bool checkChildProtection(const char *url, WidgetModel *widgetModel);
-bool checkUriRequiredNet(const std::string &uri);
-
-} // namespace SecuritySupport
-} // namespace ViewModule
-
-#endif /* VIEW_LOGIC_SECURITY_SUPPORT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_storage_support.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Implementation file of StorageSupport API used by ViewLogic
- */
-#include "view_logic_storage_support.h"
-
-#include <string>
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-#include <dpl/utils/file_utils.h>
-#include <widget_model.h>
-
-namespace ViewModule {
-namespace StorageSupport {
-
-namespace
-{ //anonymous
-const mode_t TEMPORARY_STORAGE_MODE = 0700;
-}
-
-void initializeStorage(WidgetModel *widgetModel)
-{
- LogDebug("initializeStorage");
- Assert(widgetModel && "Passed widgetModel is NULL!");
-
- // create temporary storage
- std::string path =
- DPL::ToUTF8String(
- widgetModel->TemporaryStoragePath.Get());
- FileUtils::MakePath(path, TEMPORARY_STORAGE_MODE);
-}
-
-void deinitializeStorage(WidgetModel *widgetModel)
-{
- LogDebug("deinitializeStorage");
- Assert(widgetModel && "Passed widgetModel is NULL!");
-
- // remove temporary storage
- std::string path =
- DPL::ToUTF8String(
- widgetModel->TemporaryStoragePath.Get());
- FileUtils::RemoveDir(path);
-}
-
-} // namespace StorageSupport
-} // namespace ViewModule
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_storage_support.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Header file of StorageSupport API used by ViewLogic
- */
-
-#ifndef VIEW_LOGIC_STORAGE_SUPPORT_H_
-#define VIEW_LOGIC_STORAGE_SUPPORT_H_
-
-#include <widget_model.h>
-
-namespace ViewModule {
-namespace StorageSupport {
-
-void initializeStorage(WidgetModel *widgetModel);
-void deinitializeStorage(WidgetModel *widgetModel);
-
-} // namespace StorageSupport
-} // namespace ViewModule
-
-#endif /* VIEW_LOGIC_STORAGE_SUPPORT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_uri_support.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Implementation file of UriSupport API used by ViewLogic
- */
-
-#include "view_logic_uri_support.h"
-#include <dpl/string.h>
-#include <dpl/log/log.h>
-#include <dpl/wrt-dao-ro/common_dao_types.h>
-#include <widget_model.h>
-
-namespace ViewModule {
-namespace UriSupport {
-
-namespace
-{//anonymous
-const char *APP_SERVICE_OPERATION = "__APP_SVC_OP_TYPE__";
-const char *APP_SERVICE_SCHEME = "__APP_SVC_URI__";
-const char *APP_SERVICE_MIMETYPE = "__APP_SVC_MIME_TYPE__";
-}
-
-std::string getAppServiceValue(const std::string &data,
- const std::string &key)
-{
- std::string orgin = data;
-
- if (orgin.find(key + "=") != std::string::npos) {
- // erase in front of 'key'
- orgin.erase(
- orgin.begin(),
- orgin.begin() +
- orgin.find(key + "=") +
- std::string(key + "=").length());
- // erase behind of 'value'
- if (orgin.find("&") != std::string::npos) {
- orgin.erase(
- orgin.begin()+int(orgin.find_first_of("&")), orgin.end());
- }
- } else {
- return std::string("");
- }
- return orgin;
-}
-
-std::string getAppServiceUri(const std::string &originData, WidgetModel *widgetModel)
-{
- WidgetApplicationServiceList appServiceList =
- widgetModel->AppServiceList.Get();
- std::string operation =
- getAppServiceValue(originData, std::string(APP_SERVICE_OPERATION));
- std::string scheme =
- getAppServiceValue(originData, std::string(APP_SERVICE_SCHEME));
- std::string mime =
- getAppServiceValue(originData, std::string(APP_SERVICE_MIMETYPE));
-
- FOREACH(appServiceIt, appServiceList) {
- if (DPL::ToUTF8String(appServiceIt->operation) == operation &&
- (DPL::ToUTF8String(appServiceIt->scheme) == scheme ||
- DPL::ToUTF8String(appServiceIt->scheme) == "*/*") &&
- (DPL::ToUTF8String(appServiceIt->mime) == mime ||
- DPL::ToUTF8String(appServiceIt->mime) == "*/*"))
- {
- return DPL::ToUTF8String(appServiceIt->src);
- }
- }
- LogDebug("no matching result");
- return std::string("");
-}
-
-std::string getUri(const std::string &appService, WidgetModel *widgetModel)
-{
- DPL::String uri;
- std::string startUri;
-
- // search application service
- if (appService != "") {
- LogInfo("application service information = " << appService);
- startUri = getAppServiceUri(appService, widgetModel).c_str();
- LogInfo("application service start uri is " << startUri);
- if (startUri == "") {
- LogInfo("application service doesn't have matched data");
- startUri = DPL::ToUTF8String(
- *(widgetModel->RunningStartURL.Get()));
- }
- } else {
- startUri = DPL::ToUTF8String(
- *(widgetModel->RunningStartURL.Get()));
- }
- // insert prefix path
- if (strstr(startUri.c_str(), "http") == startUri.c_str()) {
- uri = DPL::FromUTF8String(startUri);
- } else {
- uri = widgetModel->PrefixURL.Get() +
- DPL::FromUTF8String(startUri);
- }
- // append application service information
- uri += DPL::FromUTF8String(appService);
-
- return DPL::ToUTF8String(uri).c_str();
-}
-
-} // namespace UriSupportImplementation
-} // namespace ViewModule
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file view_logic_uri_support.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @brief Header file of UriSupport API used by ViewLogic
- */
-
-#ifndef VIEW_LOGIC_URI_SUPPORT_H_
-#define VIEW_LOGIC_URI_SUPPORT_H_
-
-#include <string>
-#include <widget_model.h>
-
-namespace ViewModule {
-namespace UriSupport {
-
-std::string getUri(const std::string &appService, WidgetModel *widgetModel);
-
-
-} // namespace UriSupportImplementation
-} // namespace ViewModule
-
-#endif /* VIEW_LOGIC_URI_SUPPORT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file widget_view.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Declaration of private structure with efl view data.
- */
-
-#ifndef WRT_SRC_DOMAIN_EFL_WIDGETVIEW_H_
-#define WRT_SRC_DOMAIN_EFL_WIDGETVIEW_H_
-
-#include <memory>
-#include <string>
-#include <dpl/noncopyable.h>
-#include <dpl/string.h>
-
-#include "framework_efl.h"
-#include <dpl/wrt-dao-ro/common_dao_types.h>
-#include "widget_model.h"
-
-#include <base_browser_setting.h>
-#include <vconf_browser_setting.h>
-#include <evas_object.h>
-
-// forward declaration
-class WindowData;
-class ViewLogic;
-
-enum Mode
-{
- Mode_Normal,
- Mode_Scroll
-};
-
-struct EvasStruct
-{
- EvasObject m_elmWebView;
- EvasObject m_webView;
- EvasObject m_webViewFrame;
-};
-typedef std::list<EvasStruct*> EvasStructList;
-
-#define EVAS_ELM_WEBVIEW(widgetView) \
-widgetView->m_currentEvasStruct->m_elmWebView
-#define EVAS_WEBVIEW(widgetView) \
-widgetView->m_currentEvasStruct->m_webView
-#define EVAS_WEBVIEW_FRAME(widgetView) \
-widgetView->m_currentEvasStruct->m_webViewFrame
-
-/**
- * Private structure that contains efl view data of specific widgetModel
- */
-struct WidgetViewDataStruct : private DPL::Noncopyable
-{
- WindowData *m_windowData;
- Evas* m_view;
- Evas_Object* m_elmWidget;
- EvasStruct* m_currentEvasStruct;
- EvasStructList m_evasStructList;
- EvasObject m_needSuspendWebview;
- double m_elmScale;
-
- WidgetHandle m_widgetHandle;
- bool m_firstPageLoaded;
- bool m_firstUriChanged;
- bool m_firstUriLoadFinished;
- bool m_isMainResource;
-
- EvasObject::IConnection* m_contentSizeChangedConnection;
-
- Ecore_IMF_Context* imContext;
-
- Mode mode;
- DPL::String hoveredLink;
-
- struct ComboboxDataStruct
- {
- int comboboxOptionsSize;
- int comboboxOptionSelected;
- char** comboboxOptions;
- int clickPosX;
- int clickPosY;
- };
-
- ComboboxDataStruct combo;
-
- Ewk_View_Mode m_viewMode;
-
- int webviewMaxWidth;
- int webviewMaxHeight;
-
- Ecore_Timer *m_progressTimer;
- Ecore_Timer *m_suspendTimer;
- Ecore_Event_Handler *m_eventHandlerDown;
- Ecore_Event_Handler *m_eventHandlerUp;
-
- /**
- * Path to currently displayed document.
- * Contains only scheme, authority and path parts of URI.
- * e.g. file:///var/www/index.html.
- */
- std::string m_currentUri;
-
- WidgetModel *m_widgetModel;
- ViewLogic *m_viewLogic;
-
- std::unique_ptr<BaseBrowserSetting> m_browserSetting;
-
- WidgetModel* getWidgetModel()
- {
- return m_widgetModel;
- }
-
- void initializeBrowserSettings()
- {
- m_browserSetting.reset(
- new VconfBrowserSetting(m_currentEvasStruct->m_elmWebView,
- this));
- }
-
- WidgetViewDataStruct(WidgetModel *widgetModel,
- ViewLogic *viewLogic) :
- m_widgetModel(widgetModel),
- m_viewLogic(viewLogic)
- {
- mode = Mode_Normal;
-
- //combobox data
- combo.comboboxOptionsSize = 0;
- combo.comboboxOptionSelected = 0;
- combo.comboboxOptions = NULL;
-
- //Context for keyboard;
- imContext = NULL;
-
- //Maximum widget width and height
- webviewMaxWidth = 480;
- webviewMaxHeight = 745;
-
- m_progressTimer = NULL;
- m_suspendTimer = NULL;
-
- m_elmScale = 1.0;
- }
-};
-
-#endif /* WRT_SRC_DOMAIN_EFL_WIDGETVIEW_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file window_data.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Window data class implementation
- */
-#include <ui-gadget.h>
-#include <window_data.h>
-#include <dpl/log/log.h>
-#include <dpl/scoped_ptr.h>
-#include <vconf.h>
-#include <dpl/singleton_impl.h>
-IMPLEMENT_SINGLETON(WindowLogic)
-
-namespace {
-char const* const DAEMON_EDJ_PATH = "/usr/share/edje/wrt/Daemon.edj";
-char const* const THEME_EDJ_PATH = "/usr/share/edje/wrt/wrt_theme.edj";
-char const* const ELM_STATE_SHOW_CONTENT = "elm,state,show,content";
-char const* const ELM_SWALLOW_CONTENT = "elm.swallow.content";
-char const* const ELM_SWALLOW_BACKWARD = "elm.swallow.backward";
-char const* const ELM = "elm";
-char const* const LAYOUT = "layout";
-char const* const APPLICATION = "application";
-char const* const INDICATOR = "indicator";
-char const* const NOINDICATOR = "noindicator";
-char const* const LIST_PROCESS = "list_process";
-char const* const INTERNAL_LAYOUT = "internal_layout";
-char const* const FLOATBACKWARD_BUTTON_STYLE = "wrt/backward";
-const double PROGRESS_POSITION_X = 0.5;
-const double PROGRESS_POSITION_Y = 0.5;
-const int PROGRESS_SIZE_RATIO = 12; //ResolutionWidth / ProgressWidth = 12
-const int PROGRESS_COLOR_R = 153;
-const int PROGRESS_COLOR_G = 153;
-const int PROGRESS_COLOR_B = 153;
-const int PROGRESS_COLOR_A = 255;
-const int WRONG_APPCORE_RM_PORTRAIT_VALUE = -1;
-
-struct ComboboxCallbackData
-{
- void* response_data;
- WrtComboboxResponseCallback callback;
- WindowData* windowData;
- ComboboxCallbackData(WindowData* a_windowData,
- WrtComboboxResponseCallback a_callback,
- void* a_userdata) :
- response_data(a_userdata),
- callback(a_callback),
- windowData(a_windowData)
- {
- }
-};
-} // anonymous namespace
-
-WindowLogic::WindowLogic()
-{
-}
-
-void WindowLogic::addWindow(Evas_Object* win,
- WindowData* windowData)
-{
- LogDebug("Adding window: " << win);
- m_openedWindows.insert(std::make_pair(win, windowData));
-}
-
-void WindowLogic::removeWindow(Evas_Object* win)
-{
- LogDebug("Removing window: " << win);
- m_openedWindows.erase(win);
-}
-
-void WindowLogic::showComboboxInWindow(
- Evas_Object* window,
- int length,
- char** combobox_options,
- void* response_data,
- WrtComboboxResponseCallback callback)
-{
- WindowDataMap::iterator windowDataIt = m_openedWindows.find(window);
- if (windowDataIt == m_openedWindows.end()) {
- LogError("No window in map");
- } else {
- WindowData* windowData = windowDataIt->second;
- windowData->showCombobox(length,
- combobox_options,
- response_data,
- callback);
- }
-}
-
-void WindowLogic::showComboboxCallback(int length,
- char** combobox_options,
- void* response_data,
- WrtComboboxResponseCallback callback,
- void* userdata)
-{
- Evas_Object* window = static_cast<Evas_Object*>(userdata);
-
- LogDebug("Showing combobox in window");
- WindowLogicSingleton::Instance().showComboboxInWindow(window,
- length,
- combobox_options,
- response_data,
- callback);
-}
-
-WindowData::WindowData(unsigned long pid,
- void* p_userdata) :
- m_naviBackButton(NULL),
- m_responseData(p_userdata),
- m_picker(NULL)
-{
- init(pid);
-}
-
-WindowData::~WindowData()
-{
- delete m_picker;
- WindowLogicSingleton::Instance().removeWindow(m_win);
- for (EventWithFunctionVector::iterator eventWithFunction =
- m_registeredSmartCallbacks.begin();
- eventWithFunction != m_registeredSmartCallbacks.end();
- ++eventWithFunction)
- {
- smartCallbackDel(
- eventWithFunction->eventName.c_str(), eventWithFunction->function);
- }
- evas_object_del(m_win);
-}
-
-void WindowData::init(unsigned long pid)
-{
- int result;
- // import button theme
- elm_theme_overlay_add(NULL, THEME_EDJ_PATH);
-
- m_win = createWindow(pid);
- m_platform_layout = createPlatformLayout(m_win);
- evas_object_show(m_platform_layout);
- m_navigation = createNavigationBar(m_platform_layout);
- evas_object_show(m_navigation);
- m_user_layout = createUserLayout(m_navigation);
- evas_object_show(m_user_layout);
- m_conformant = createConformant(m_win, m_user_layout);
- evas_object_show(m_conformant);
- m_progress = createProgress(m_user_layout);
-
- WindowLogicSingleton::Instance().addWindow(m_win, this);
-
- result = ug_init(
- static_cast<Display*>(ecore_x_display_get()),
- elm_win_xwindow_get(m_win),
- m_win,
- UG_OPT_INDICATOR_ENABLE);
-
- if (result != 0) {
- LogError("Gadget creation failed for window: " << m_win);
- Assert(false && "UI Gadget creation failed");
- }
-
- m_picker = new ComboboxPicker(m_win,
- m_navigation,
- m_user_layout);
-}
-
-void* WindowData::getResponseUserdata() const
-{
- return m_responseData;
-}
-
-void WindowData::setEvasObjectForLayout(Evas_Object* evas_object)
-{
- elm_conformant_content_set(m_conformant, evas_object);
-}
-
-void WindowData::unsetEvasObjectForLayout()
-{
- elm_conformant_content_unset(m_conformant);
-}
-
-void WindowData::picker_callback(const DPL::OptionalInt& index, void* userdata)
-{
- ComboboxCallbackData* data = static_cast<ComboboxCallbackData*>(userdata);
-
- LogInfo("Response for combobox was set");
- if (!!index) {
- LogDebug("Index is " << *index);
- if (data->callback) {
- data->callback(*index, data->response_data);
- }
- } else {
- delete data;
- }
-}
-
-void WindowData::hideCombobox()
-{
- if (m_picker) {
- m_picker->HideComboboxPicker();
- }
-}
-
-void WindowData::showCombobox(
- int length,
- char** combobox_options,
- void* response_data,
- WrtComboboxResponseCallback callback)
-{
- if (m_picker) {
- LogInfo("Showing combobox");
- ComboboxCallbackData* data = new ComboboxCallbackData(this,
- callback,
- response_data);
- m_picker->ShowComboboxPicker(length,
- combobox_options,
- picker_callback,
- data);
- }
-}
-
-void WindowData::loadingOn()
-{
- LogInfo("loadingOn");
-
- alignProgressPosition();
- elm_progressbar_pulse(m_progress, EINA_TRUE);
- evas_object_show(m_progress);
-}
-
-void WindowData::loadingOff()
-{
- LogInfo("loadingOff");
-
- elm_progressbar_pulse(m_progress, EINA_FALSE);
- evas_object_hide(m_progress);
-}
-
-void WindowData::moveProgress()
-{
- LogInfo("moveProgress");
-
- if (evas_object_visible_get(m_progress) == EINA_TRUE) {
- alignProgressPosition();
- } else {
- LogInfo("Progress is hide");
- }
-}
-
-void WindowData::setViewModeFullScreen(bool indicator, bool backbutton)
-{
- LogDebug("indicator: " << indicator << ", backbutton: " << backbutton);
- if (indicator) {
- elm_win_indicator_state_set(m_win, EINA_TRUE);
- elm_layout_theme_set(m_platform_layout,
- LAYOUT, APPLICATION, INDICATOR);
- } else {
- elm_win_indicator_state_set(m_win, EINA_FALSE);
- elm_layout_theme_set(m_platform_layout,
- LAYOUT, APPLICATION, NOINDICATOR);
- }
- if (backbutton) {
- createFloatBackButton();
- }
-}
-
-void WindowData::setViewModeMaximized(
- const char *title,
- bool indicator,
- bool backbutton)
-{
- LogDebug("indicator: " << indicator << ", backbutton: " << backbutton);
- if (indicator) {
- elm_win_indicator_state_set(m_win, EINA_TRUE);
- elm_layout_theme_set(m_platform_layout,
- LAYOUT, APPLICATION, INDICATOR);
- } else {
- elm_win_indicator_state_set(m_win, EINA_FALSE);
- elm_layout_theme_set(m_platform_layout,
- LAYOUT, APPLICATION, NOINDICATOR);
- }
- createTitle(title);
- if (backbutton) {
- createFloatBackButton();
- }
-}
-
-void WindowData::createTitle(const char* data)
-{
- LogDebug("createTitle");
- Elm_Object_Item* naviIt = elm_naviframe_top_item_get(m_navigation);
- elm_naviframe_item_title_visible_set(naviIt, EINA_TRUE);
- elm_object_item_text_set(naviIt, data);
-}
-
-void WindowData::removeTitle()
-{
- Elm_Object_Item* naviIt = elm_naviframe_top_item_get(m_navigation);
- elm_object_item_text_set(naviIt, "");
- elm_naviframe_item_title_visible_set(naviIt, EINA_FALSE);
-}
-
-void WindowData::createTitleButton()
-{
- // Add left button for back action
- m_naviBackButton = elm_button_add(m_navigation);
- elm_object_style_set(m_naviBackButton, "navigationbar_backbutton/default");
-
- Elm_Object_Item* naviIt = elm_naviframe_top_item_get(m_navigation);
- elm_object_item_part_content_set(naviIt, ELM_NAVIFRAME_ITEM_PREV_BTN,
- m_naviBackButton);
-}
-
-void WindowData::createFloatBackButton()
-{
- // Add float backbutton on the left coner
- m_floatBackButton = elm_button_add(m_user_layout);
- elm_object_style_set(m_floatBackButton, FLOATBACKWARD_BUTTON_STYLE);
- elm_layout_content_set(m_user_layout,
- ELM_SWALLOW_BACKWARD,
- m_floatBackButton);
- evas_object_show(m_floatBackButton);
-}
-
-void WindowData::updateTitleButton(const bool display)
-{
- if (display) {
- evas_object_show(m_naviBackButton);
- } else {
- evas_object_hide(m_naviBackButton);
- }
-}
-
-Evas_Object* WindowData::createWindow(unsigned long pid)
-{
- Evas_Object* window = elm_win_add(NULL, "wrt-widget", ELM_WIN_BASIC);
- ecore_x_window_prop_property_set(
- elm_win_xwindow_get(window),
- ECORE_X_ATOM_NET_WM_PID,
- ECORE_X_ATOM_CARDINAL, 32, &pid, 1);
- elm_win_title_set(window, "wrt-widget");
- elm_win_borderless_set(window, EINA_TRUE);
- elm_win_conformant_set(window, EINA_TRUE);
- int w, h;
- ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
- evas_object_resize(window, w, h);
- return window;
-}
-
-Evas_Object* WindowData::createPlatformLayout(Evas_Object* parent)
-{
- Evas_Object* platform_layout = elm_layout_add(parent);
- elm_layout_theme_set(platform_layout, LAYOUT, APPLICATION, NOINDICATOR);
- evas_object_size_hint_expand_set(platform_layout,
- EVAS_HINT_EXPAND,
- EVAS_HINT_EXPAND);
- elm_win_resize_object_add(m_win, platform_layout);
- edje_object_signal_emit(
- elm_layout_edje_get(platform_layout), ELM_STATE_SHOW_CONTENT, ELM);
- return platform_layout;
-}
-
-Evas_Object* WindowData::createUserLayout(Evas_Object* parent)
-{
- Assert(parent != NULL && "Parent for User Layout is null");
- Evas_Object* layout = elm_layout_add(parent);
- elm_layout_file_set(layout, DAEMON_EDJ_PATH, "client");
- evas_object_size_hint_weight_set(
- layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- Elm_Object_Item* naviIt = elm_naviframe_item_push(
- /* Evas_Object *obj */
- parent,
- /* const char *title_label */
- "",
- /* Evas_Object *prev_btn */
- NULL,
- /* Evas_Object *next_btn */
- NULL,
- /* Evas_Object *content */
- layout,
- /* const char *item_style */
- NULL);
-
- elm_naviframe_item_title_visible_set(naviIt, EINA_FALSE);
- return layout;
-}
-
-Evas_Object* WindowData::createConformant(
- Evas_Object* window, Evas_Object* parent)
-{
- Assert(window != NULL && "Window is null");
- Assert(parent != NULL && "Parent is null");
- elm_win_conformant_set(window, EINA_TRUE);
- Evas_Object* conformant = elm_conformant_add(parent);
- elm_object_style_set(conformant, INTERNAL_LAYOUT);
- evas_object_size_hint_weight_set(
- conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
- evas_object_size_hint_align_set(conformant, EVAS_HINT_FILL, EVAS_HINT_FILL);
- elm_layout_content_set(m_user_layout, ELM_SWALLOW_CONTENT, conformant);
- evas_object_show(conformant);
- return conformant;
-}
-
-Evas_Object* WindowData::createNavigationBar(Evas_Object* parent)
-{
- Assert(parent != NULL && "Parent for naviframe is null");
- Evas_Object* navigation = elm_naviframe_add(parent);
- elm_layout_content_set(parent, ELM_SWALLOW_CONTENT, navigation);
- return navigation;
-}
-
-Evas_Object* WindowData::createProgress(Evas_Object* parent)
-{
- Assert(parent != NULL && "Parent for progress is null");
- Evas_Object* progress = elm_progressbar_add(parent);
- progress = elm_progressbar_add(parent);
- elm_object_style_set(progress, LIST_PROCESS);
- evas_object_color_set(progress,
- PROGRESS_COLOR_R,
- PROGRESS_COLOR_G,
- PROGRESS_COLOR_B,
- PROGRESS_COLOR_A);
- Evas_Coord x, y, w, h;
- int progressW, progressH;
- evas_object_geometry_get(m_win, &x, &y, &w, &h);
- progressW = w / static_cast<Evas_Coord>(PROGRESS_SIZE_RATIO);
- progressH = progressW;
-
- evas_object_resize(progress, progressW, progressH);
- return progress;
-}
-
-void WindowData::alignProgressPosition()
-{
- Evas_Coord layOutX, layOutY, layOutW, layOutH;
- Evas_Coord progressX, progressY, progressW, progressH;
- Evas_Coord alignedX, alignedY;
-
- evas_object_geometry_get(m_user_layout,
- &layOutX,
- &layOutY,
- &layOutW,
- &layOutH);
- evas_object_geometry_get(m_progress,
- &progressX,
- &progressY,
- &progressW,
- &progressH);
- alignedX = (layOutW - progressW) * PROGRESS_POSITION_X + layOutX;
- alignedY = (layOutH - progressH) * PROGRESS_POSITION_Y + layOutY;
- evas_object_move(m_progress, alignedX, alignedY);
-}
-
-void WindowData::smartCallbackAdd(
- const char* event,
- CallbackType f,
- const void* data)
-{
- evas_object_smart_callback_add(m_win, event, f, data);
- m_registeredSmartCallbacks.push_back(EventWithFunction(f, event));
-}
-
-void* WindowData::smartCallbackDel(
- const char* event,
- CallbackType f)
-{
- //we assume that the caller takes care of userdata
- return evas_object_smart_callback_del(m_win, event, f);
-}
-
-void WindowData::addNaviBackButtonCallback(
- const char* event,
- CallbackType callback,
- const void* data)
-{
- Assert(m_naviBackButton != NULL && "m_naviBackButton is null");
- evas_object_smart_callback_add(m_naviBackButton, event, callback, data);
-}
-
-void* WindowData::delNaviBackButtonCallback(
- const char* event,
- CallbackType callBack)
-{
- Assert(m_naviBackButton != NULL && "m_naviBackButton is null");
- return evas_object_smart_callback_del(m_naviBackButton, event, callBack);
-}
-
-void WindowData::addFloatBackButtonCallback(
- const char* event,
- CallbackType callback,
- const void* data)
-{
- Assert(m_floatBackButton != NULL && "m_floatBackButton is null");
- evas_object_smart_callback_add(m_floatBackButton, event, callback, data);
-}
-
-void* WindowData::delFloatBackButtonCallback(
- const char* event,
- CallbackType callBack)
-{
- Assert(m_floatBackButton != NULL && "m_floatBackButton is null");
- return evas_object_smart_callback_del(m_floatBackButton, event, callBack);
-}
-
-void WindowData::userlayoutCallbackAdd(
- const Evas_Callback_Type event,
- EvasCallbackType callback,
- const void* data)
-{
- Assert(m_user_layout != NULL && "m_user_layout is null");
- evas_object_event_callback_add(m_user_layout, event, callback, data);
-}
-
-void* WindowData::userlayoutCallbackDel(
- const Evas_Callback_Type event,
- EvasCallbackType callBack)
-{
- Assert(m_user_layout != NULL && "m_user_layout is null");
- return evas_object_event_callback_del(m_user_layout, event, callBack);
-}
-
-void WindowData::emitSignalForUserLayout(
- const char* emission, const char* source)
-{
- LogInfo("emitSignalForUserLayout called");
- Assert(m_user_layout != NULL && "m_user_layout is null");
- Assert(emission != NULL && "emission is null");
- Assert(source != NULL && "source is null");
-
- edje_object_signal_emit(
- elm_layout_edje_get(m_user_layout), emission, source);
-}
-
-int WindowData::rotationCallback(appcore_rm mode, void* data)
-{
- LogInfo("RotationCallback called");
- Evas_Object* window = static_cast<Evas_Object*>(data);
- Assert(window != NULL && "window is null");
-
- // get landscape setting is on/off
- int enableLandscape;
- if (vconf_get_bool(
- VCONFKEY_SETAPPL_ROTATE_LOCK_BOOL, &enableLandscape) < 0)
- {
- LogWarning ("Cannot get vconf key");
- return 0;
- }
- if (enableLandscape) {
- LogDebug("Landscape is disabled");
- return 0;
- }
-
- // get rotation degree from arg, mode.
- DPL::Optional<int> degree;
- switch (mode) {
- case APPCORE_RM_PORTRAIT_NORMAL:
- degree = 0;
- break;
- case APPCORE_RM_PORTRAIT_REVERSE:
- degree = 180;
- break;
- case APPCORE_RM_LANDSCAPE_NORMAL:
- degree = 270;
- break;
- case APPCORE_RM_LANDSCAPE_REVERSE:
- degree = 90;
- break;
- default:
- degree = WRONG_APPCORE_RM_PORTRAIT_VALUE;
- break;
- }
- LogDebug("rotation degress is " << degree);
- if (degree != WRONG_APPCORE_RM_PORTRAIT_VALUE) {
- elm_win_rotation_with_resize_set(window, *degree);
- }
- return 0;
-}
-
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file window_data.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Window data header file.
- */
-
-#ifndef WINDOW_INITIALIZE_H_
-#define WINDOW_INITIALIZE_H_
-
-#include <framework_efl.h>
-#include <appcore-common.h>
-#include <wrt_api.h>
-#include <vector>
-#include <string>
-#include <map>
-
-#include <combobox_picker.h>
-#include <dpl/singleton.h>
-#include <dpl/optional.h>
-#include <dpl/noncopyable.h>
-
-/*
- * Current layout structure
- * It is so compliacted because of picker for combobox
- *
- * m_win (elm_win)
- * m_platform_layout (elm_layout)
- * m_navigation (elm_navigation)
- * m_user_layout (elm_layout)
- * widget_area (elm_webview)
- * pickerCombobox (elm_box)
- *
- *
- */
-
-class WindowData : private DPL::Noncopyable
-{
- private:
- typedef void (*CallbackType)(
- void* data, Evas_Object* obj, void* event_info);
- typedef void (*EvasCallbackType)(
- void* data, Evas* evas, Evas_Object* obj, void* event_info);
- struct EventWithFunction
- {
- CallbackType function;
- std::string eventName;
- EventWithFunction(CallbackType a_function,
- const char * a_eventName) :
- function(a_function),
- eventName(a_eventName)
- {
- }
- };
- typedef std::vector<EventWithFunction> EventWithFunctionVector;
-
- public:
- Evas_Object* m_win;
-
- explicit WindowData(unsigned long pid,
- void* p_userdata);
- virtual ~WindowData();
-
- void init(unsigned long pid);
- void setEvasObjectForLayout(Evas_Object* evas_object);
- void unsetEvasObjectForLayout();
- void smartCallbackAdd(const char* event,
- CallbackType callback,
- const void* data);
- void* smartCallbackDel(const char* event,
- CallbackType callback);
- void* getResponseUserdata() const;
-
- void showCombobox(int length,
- char** combobox_options,
- void* response_data,
- WrtComboboxResponseCallback callback);
-
- void loadingOn();
- void loadingOff();
- void moveProgress();
- void setViewModeFullScreen(bool indicator, bool backbutton);
- void setViewModeMaximized(
- const char *title,
- bool indicator,
- bool backbutton);
- void addNaviBackButtonCallback(
- const char* event,
- CallbackType callback,
- const void* data);
- void* delNaviBackButtonCallback(
- const char* event,
- CallbackType callBack);
- void addFloatBackButtonCallback(
- const char* event,
- CallbackType callback,
- const void* data);
- void* delFloatBackButtonCallback(
- const char* event,
- CallbackType callBack);
- void userlayoutCallbackAdd(
- const Evas_Callback_Type event,
- EvasCallbackType callback,
- const void* data);
- void* userlayoutCallbackDel(
- const Evas_Callback_Type event,
- EvasCallbackType callback);
- void emitSignalForUserLayout(
- const char* emission,
- const char* source);
-
- private:
- Evas_Object* m_platform_layout;
- Evas_Object* m_user_layout;
- Evas_Object* m_navigation;
- Evas_Object* m_naviBackButton;
- Evas_Object* m_floatBackButton;
- Evas_Object* m_conformant;
- Evas_Object* m_progress;
-
- EventWithFunctionVector m_registeredSmartCallbacks;
- void* m_responseData;
- ComboboxPicker* m_picker;
-
- Evas_Object* createWindow(unsigned long pid);
- Evas_Object* createPlatformLayout(Evas_Object * parent);
- Evas_Object* createNavigationBar(Evas_Object *parent);
- Evas_Object* createUserLayout(Evas_Object * parent);
- Evas_Object* createConformant(
- Evas_Object* window, Evas_Object* parent);
- Evas_Object* createProgress(Evas_Object* parent);
- void alignProgressPosition();
- void hideCombobox();
- static void picker_callback(const DPL::OptionalInt& index, void* userdata);
- static int rotationCallback(appcore_rm mode, void* data);
- void createTitle(const char * data);
- void removeTitle();
- void createTitleButton();
- void createFloatBackButton();
- void updateTitleButton(const bool display);
-};
-
-class WindowLogic
-{
- private:
- typedef std::map<Evas_Object*, WindowData*> WindowDataMap;
-
- public:
- WindowLogic();
- void addWindow(
- Evas_Object* window,
- WindowData* windowData);
- void removeWindow(Evas_Object* window);
- void showComboboxInWindow(
- Evas_Object* window,
- int length,
- char** combobox_options,
- void* response_data,
- WrtComboboxResponseCallback callback);
- static void showComboboxCallback(
- int length,
- char** combobox_options,
- void* resposne_data,
- WrtComboboxResponseCallback callback,
- void* userdata);
-
- private:
- WindowDataMap m_openedWindows;
-};
-
-typedef DPL::Singleton<WindowLogic> WindowLogicSingleton;
-
-#endif /* WINDOW_INITIALIZE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file global_context.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for global context
- */
-#include <dpl/popup/popup_controller.h>
-#include <global_context.h>
-#include <security_controller.h>
-#include <widget_controller.h>
-#include <user_callback_controller.h>
-#include <application_launcher.h>
-#include <plugin_api_controller.h>
-#include <global_logic.h>
-#include <ui-process/rpc_server.h>
-
-namespace GlobalContext {
-
-void TouchArchitecture()
-{
- // Touch all WebRuntime controllers
- // Remember to always add here new singletons!
- GlobalLogicSingleton::Instance().GetGlobalModel();
- SecurityControllerSingleton::Instance().Touch();
- UserCallbackControllerSingleton::Instance().Touch();
- WidgetControllerSingleton::Instance().Touch();
- ApplicationLauncherSingleton::Instance().Touch();
- DPL::Popup::PopupControllerSingleton::Instance().Touch();
- PluginApiControllerSingleton::Instance().Touch();
- // Start UI process rpc server
- RpcServerSingleton::Instance().Touch();
-}
-} // namespace GlobalContext
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file global_context.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Header file for global contect
- */
-#ifndef GLOBAL_CONTEXT_H
-#define GLOBAL_CONTEXT_H
-
-namespace GlobalContext {
-
-void Initialize();
-
-void Finalize();
-
-/**
- * Touch all singletons to inherit default context
- */
-void TouchArchitecture();
-} // namespace GlobalContext
-
-#endif // GLOBAL_CONTEXT_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file popups_server.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Implementation of PopupServer, which manages Popup requests.
- */
-#include "popups_server.h"
-
-#include <memory>
-
-#include <dpl/assert.h>
-#include <CommunicationBox.h>
-
-//DBUS stuff
-#include "security_daemon_dbus_config.h"
-#include "popup_response_service_api.h"
-#include <popup_response_service/popup_response_service_config.h>
-
-
-namespace {
-struct PopupsUserdata
-{
- PopupsUserdata(AceUserdata const * const pAceUserdata,
- CommunicationBox* pCommunicationBox,
- const PopupsServer::IPCResponseDelegate& pResponseDelegate)
- :
- aceUserdata(pAceUserdata),
- communicationBox(pCommunicationBox),
- response(pResponseDelegate)
- {
- }
- AceUserdata const * const aceUserdata;
- std::unique_ptr<CommunicationBox> communicationBox;
- Prompt::PromptLabelsPtr promptLabels;
- PopupsServer::IPCResponseDelegate response;
-};
-
-
-Prompt::PromptLabels* getPromptLabelsFromPolicyEffect(
- const PolicyEffect promptEffect, const std::string& resource)
-{
- switch(promptEffect) {
- case PolicyEffect::PROMPT_ONESHOT: {
- return Prompt::PromptModel::getOneShotModel(resource);
- }
- case PolicyEffect::PROMPT_SESSION: {
- return Prompt::PromptModel::getSessionModel(resource);
- }
- case PolicyEffect::PROMPT_BLANKET: {
- return Prompt::PromptModel::getBlanketModel(resource);
- }
- default:
- LogError("Policy Effect not an prompt");
- Assert(0);
- return NULL;
- }
-}
-
-} //anonymous
-
-void PopupsServer::showACEPopup(const PolicyEffect promptType,
- AceUserdata const * const userdata,
- const IPCResponseDelegate& response)
-{
- PopupsUserdata* popupsUserdata =
- new PopupsUserdata(userdata, new CommunicationBox(), response);
-
- //TODO check inside ACE if request is valid
- using namespace Prompt;
- popupsUserdata->promptLabels.reset(
- getPromptLabelsFromPolicyEffect(promptType, userdata->resource));
- popupsUserdata->communicationBox->showAsync(
- static_cast<PromptModel::PromptType>(
- popupsUserdata->promptLabels->getPromptType()),
- popupsUserdata->promptLabels->getMainLabel(),
- popupsUserdata->promptLabels->getButtonLabels(),
- popupsUserdata->promptLabels->getCheckLabel(),
- CommunicationBox::ResponseDelegate(
- this,
- &PopupsServer::acePopupAnswerCallback),
- popupsUserdata);
-
-}
-
-bool PopupsServer::securityDaemonCall(int buttonAnswer,
- bool /*checkState*/,
- AceUserdata const * const userdata)
-//TODO is it good place for communicating with Security Daemon?
-// Or should it be in rpc_server?
-{
- if(!m_dbusClient)
- m_dbusClient.Reset(new DPL::DBus::Client(
- RPC::PopupResponseServiceConfig::getObjectPath(),
- RPC::PopupResponseServiceConfig::getServiceName(),
- RPC::PopupResponseServiceApi::getInterfaceName()));
-
- bool response;
- //TODO send everything: buttonAnswer, checkState, userdata
- m_dbusClient->call(RPC::PopupResponseServiceApi::getValidationMethodName(),
- buttonAnswer,
- userdata->handle,
- userdata->subject,
- userdata->resource,
- userdata->paramKeys,
- userdata->paramValues,
- &response);
-
- return response;
-}
-
-void PopupsServer::acePopupAnswerCallback(int buttonAnswer,
- bool checkState,
- void* userdata)
-{
- std::unique_ptr<PopupsUserdata> managedUserdata(
- static_cast<PopupsUserdata*>(userdata));
-
- Prompt::PromptAnswer promptAnswer(
- managedUserdata->promptLabels->getPromptType(),
- buttonAnswer, checkState);
-
- const bool allowed = promptAnswer.isAccessAllowed();
- const Prompt::Validity validity = promptAnswer.getValidity();
-
- // if user answer is DENY ONCE then don't call security daemon
- if (!allowed && Prompt::Validity::ONCE == validity)
- {
- managedUserdata->response(allowed,
- managedUserdata->aceUserdata);
- return;
- }
- bool response = securityDaemonCall(buttonAnswer,
- checkState,
- managedUserdata->aceUserdata);
-
- if(!response)
- {
- LogError("Security Daemon has responded with false!");
-
- //informing WebProcess that call to security daemon has failed
- managedUserdata->response(false,
- managedUserdata->aceUserdata);
- }
- else
- {
- managedUserdata->response(allowed,
- managedUserdata->aceUserdata);
- }
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file popups_server.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Declaration for PopupServer, class that manages Popup requests.
- */
-
-#ifndef WRT_SRC_DOMAIN_POPUPS_SERVER_H_
-#define WRT_SRC_DOMAIN_POPUPS_SERVER_H_
-
-#include <vector>
-#include <string>
-#include <memory>
-#include <dpl/singleton.h>
-#include <dpl/fast_delegate.h>
-#include <dpl/scoped_ptr.h>
-#include <dpl/dbus/dbus_client.h>
-#include <popup_ace_data_types.h>
-#include <dpl/ace/PolicyEffect.h>
-
-class PopupsServer
-{
- public:
- typedef DPL::FastDelegate<void (const bool,
- AceUserdata const * const userdata)>
- IPCResponseDelegate;
-
- void showACEPopup(const PolicyEffect promptType,
- AceUserdata const * const userdata,
- const IPCResponseDelegate& response);
-
- void acePopupAnswerCallback(int buttonAnswer,
- bool checkState,
- void* userdata);
-
-
- bool securityDaemonCall(int buttonAnswer,
- bool checkState,
- AceUserdata const * const userdata);
- private:
- friend class DPL::Singleton<PopupsServer>;
-
- DPL::ScopedPtr<DPL::DBus::Client> m_dbusClient;
-};
-
-typedef DPL::Singleton<PopupsServer> PopupsServerSingleton;
-
-#endif /* WRT_SRC_DOMAIN_POPUPS_SERVER_H_ */
+++ /dev/null
-WAC POWDER document parser and data structures
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file powder_syntax.cpp
- * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version 1.0
- * @brief Powder syntax implementation
- */
-
-#include "powder_syntax.h"
-#include <dpl/foreach.h>
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file powder_syntax.h
- * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version 1.0
- * @brief Powder syntax header
- */
-
-#ifndef _POWDER_SYNTAX_
-#define _POWDER_SYNTAX_
-
-#include <dpl/string.h>
-#include <dpl/optional.h>
-#include <dpl/optional_typedefs.h>
-#include <list>
-#include <map>
-#include <set>
-#include <vector>
-
-#include <dpl/wrt-dao-ro/common_dao_types.h>
-
-//! Powder description implementation
-//!
-//! SP-2650 - SP-2693
-namespace Powder {
-typedef std::set<DPL::String> StringSet;
-
-
-namespace Privacy {
-//! Usages tags
-enum Usage
-{
- UsagePE, //! pe
- UsageAD, //! ad
- UsageMA //! ma
-};
-
-//! Source Privacy knowledge
-struct Source
-{
- struct Record
- {
- typedef std::list<bool> BoolList;
- typedef std::list<unsigned int> RangeList;
- typedef std::list<Usage> UsageList;
-
- DPL::Optional<DPL::String> feature;
- DPL::Optional<DPL::String> website;
- BoolList nt;
- BoolList lo;
- BoolList el;
- RangeList pe;
- BoolList st;
- RangeList sp;
- BoolList sa;
- BoolList sh;
- BoolList us;
- BoolList uu;
- UsageList pu;
- UsageList su;
- };
-
- typedef std::list<Record> Knowledge;
-}; //struct PrivacySource
-
-//! Return true if knowledge is valid
-//TODO: not implemented
-bool ValidateKnowledge(const Source::Knowledge& source);
-
-//! Digested privacy knowledge
-struct Digested
-{
- struct Record
- {
- //! Website where private data is stored
- StringSet websites;
-
- //! Map contains name of tag and logical value (used or not used)
- //! nt
- //! lo
- //! el
- //! st
- //! sa
- //! sh
- //! us
- //! uu
- typedef std::map<DPL::String, bool> BoolUsage;
- BoolUsage boolUsage;
-
- //! Map contains name of tag and range value (0 means infinity)
- //! pe
- //! sp
- typedef std::map<DPL::String, unsigned int> RangeUsage;
- RangeUsage rangeUsage;
-
- //! Map contains name of tag and set of usages for it
- //! pu PrimaryUsage
- //! su SecondaryUsage)
- typedef std::set<Usage> UsagesSet;
- typedef std::map<DPL::String, UsagesSet> TypeUsage;
- TypeUsage typeUsage;
- };
-
- //! Set of privacy records
- typedef std::set<Record> Records;
-
- //! Map from feature name to set of privacy records for feature
- typedef std::map<DPL::String, Records> Knowledge;
-}; // struct Digested
-
-//! Generates user friendly knowledge representation
-//TODO: not implemented
-Digested::Knowledge& MakeDigestedKnowledge(const Source::Knowledge& source);
-} //namespace Privacy
-} //namespace Powder
-
-#endif // ifndef _POWDER_SYNTAX_
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file user_agent_profile.cpp
- * @author Bartosz Janiak (b.janiak@samsung.com)
- * @version 1.0
- * @brief User Agent Profile diff generation & utils (WAC 2.0 WR-4210)
- */
-
-#include "user_agent_profile.h"
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <fstream>
-#include <sstream>
-#include <dpl/optional.h>
-
-std::string UserAgentProfile::GetProfileDiff()
-{
- //We don't use profile diff currently.
- static std::string result;
- return result;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file user_agent_profile.h
- * @author Bartosz Janiak (b.janiak@samsung.com)
- * @version 1.0
- * @brief User Agent Profile diff generation & utils (WAC 2.0 WR-4210)
- */
-
-#ifndef USER_AGENT_PROFILE_H
-#define USER_AGENT_PROFILE_H
-
-#include <string>
-namespace UserAgentProfile {
-//Need to use std::string here for interoperability with openssl and ewk
-std::string GetProfileDiff();
-}
-
-#endif /* USER_AGENT_PROFILE_H */
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file user_callback_controller.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for user callback controller
- */
-#include <user_callback_controller.h>
-#include <dpl/singleton_impl.h>
-IMPLEMENT_SINGLETON(UserCallbackController)
-
-UserCallbackController::UserCallbackController()
-{
-}
-
-UserCallbackController::~UserCallbackController()
-{
-}
-
-void UserCallbackController::OnEventReceived(
- const UserCallbackControllerEvents::EmitUserCallbackEvent &event)
-{
- UserCallbackCall *userCallback = event.GetArg0();
- m_userCallbackLogic.EmitUserCallback(userCallback);
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file user_callback_controller.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Header file for user callback controller
- */
-#ifndef USER_CALLBACK_CONTROLLER_H
-#define USER_CALLBACK_CONTROLLER_H
-
-#include <dpl/singleton.h>
-#include <dpl/event/controller.h>
-#include <dpl/generic_event.h>
-#include <dpl/type_list.h>
-#include <user_callback_logic.h>
-#include <string>
-
-namespace UserCallbackControllerEvents {
-/**
- * Send guarded user callback
- *
- * @brief This event send asynchronous user callback call event
- *
- * After user callback is emmited, user callback will be deleted by logic.
- */
-DECLARE_GENERIC_EVENT_1(EmitUserCallbackEvent, UserCallbackCall *) // (userCallback)
-} // namespace UserCallbackControllerEvents
-
-class UserCallbackController :
- public DPL::Event::Controller<DPL::TypeListDecl<UserCallbackControllerEvents::
- EmitUserCallbackEvent>::Type>
-{
- public:
- virtual ~UserCallbackController();
-
- protected:
- virtual void OnEventReceived(
- const UserCallbackControllerEvents::EmitUserCallbackEvent &event);
-
- private:
- UserCallbackLogic m_userCallbackLogic;
-
- UserCallbackController();
-
- friend class DPL::Singleton<UserCallbackController>;
-};
-
-typedef DPL::Singleton<UserCallbackController> UserCallbackControllerSingleton;
-
-inline void POST_USER_CALLBACK(UserCallbackCall *call)
-{
- CONTROLLER_POST_EVENT(UserCallbackController,
- UserCallbackControllerEvents::EmitUserCallbackEvent(
- call));
-}
-
-#endif // USER_CALLBACK_CONTROLLER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file user_callback_logic.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for user callback logic
- */
-#include <user_callback_logic.h>
-#include <dpl/exception.h>
-#include <dpl/log/log.h>
-
-UserCallbackLogic::UserCallbackLogic()
-{
-}
-
-UserCallbackLogic::~UserCallbackLogic()
-{
-}
-
-void UserCallbackLogic::EmitUserCallback(const UserCallbackCall *callback)
-{
- LogDebug("Calling user callback...");
-
- // Guard user callback call
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- callback->Exec();
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-
- // Delete abstract usercallback
- delete callback;
-
- LogDebug("User callback called.");
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file user_callback_logic.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for user callback logic
- */
-#ifndef USER_CALLBACK_LOGIC_H
-#define USER_CALLBACK_LOGIC_H
-
-#include <dpl/singleton.h>
-#include <dpl/assert.h>
-
-class UserCallbackCall
-{
- public:
- virtual ~UserCallbackCall()
- {
- }
- virtual void Exec() const = 0;
-};
-
-template<typename Callback>
-class GenericUserCallbackCall0 :
- public UserCallbackCall
-{
- private:
- Callback m_callback;
-
- public:
- GenericUserCallbackCall0(Callback callback) :
- m_callback(callback)
- {
- }
-
- virtual void Exec() const
- {
- Assert(m_callback != NULL);
- m_callback();
- }
-};
-
-template<typename Callback, typename Arg0>
-class GenericUserCallbackCall1 :
- public UserCallbackCall
-{
- private:
- Callback m_callback;
- Arg0 m_arg0;
-
- public:
- GenericUserCallbackCall1(Callback callback,
- Arg0 arg0) :
- m_callback(callback),
- m_arg0(arg0)
- {
- }
-
- virtual void Exec() const
- {
- Assert(m_callback != NULL);
- m_callback(m_arg0);
- }
-};
-
-template<typename Callback, typename Arg0, typename Arg1>
-class GenericUserCallbackCall2 :
- public UserCallbackCall
-{
- private:
- Callback m_callback;
- Arg0 m_arg0;
- Arg1 m_arg1;
-
- public:
- GenericUserCallbackCall2(Callback callback,
- Arg0 arg0,
- Arg1 arg1) :
- m_callback(callback),
- m_arg0(arg0),
- m_arg1(arg1)
- {
- }
-
- virtual void Exec() const
- {
- Assert(m_callback != NULL);
- m_callback(m_arg0, m_arg1);
- }
-};
-
-template<typename Callback, typename Arg0, typename Arg1, typename Arg2>
-class GenericUserCallbackCall3 :
- public UserCallbackCall
-{
- private:
- Callback m_callback;
- Arg0 m_arg0;
- Arg1 m_arg1;
- Arg2 m_arg2;
-
- public:
- GenericUserCallbackCall3(Callback callback,
- Arg0 arg0,
- Arg1 arg1,
- Arg2 arg2) :
- m_callback(callback),
- m_arg0(arg0),
- m_arg1(arg1),
- m_arg2(arg2)
- {
- }
-
- virtual void Exec() const
- {
- Assert(m_callback != NULL);
- m_callback(m_arg0, m_arg1, m_arg2);
- }
-};
-
-template<typename Callback, typename Arg0, typename Arg1, typename Arg2,
- typename Arg3>
-class GenericUserCallbackCall4 :
- public UserCallbackCall
-{
- private:
- Callback m_callback;
- Arg0 m_arg0;
- Arg1 m_arg1;
- Arg2 m_arg2;
- Arg3 m_arg3;
-
- public:
- GenericUserCallbackCall4(Callback callback,
- Arg0 arg0,
- Arg1 arg1,
- Arg2 arg2,
- Arg3 arg3) :
- m_callback(callback),
- m_arg0(arg0),
- m_arg1(arg1),
- m_arg2(arg2),
- m_arg3(arg3)
- {
- }
-
- virtual void Exec() const
- {
- Assert(m_callback != NULL);
- m_callback(m_arg0, m_arg1, m_arg2, m_arg3);
- }
-};
-
-template<typename Callback, typename Arg0, typename Arg1, typename Arg2,
- typename Arg3, typename Arg4>
-class GenericUserCallbackCall5 :
- public UserCallbackCall
-{
- private:
- Callback m_callback;
- Arg0 m_arg0;
- Arg1 m_arg1;
- Arg2 m_arg2;
- Arg3 m_arg3;
- Arg4 m_arg4;
-
- public:
- GenericUserCallbackCall5(Callback callback,
- Arg0 arg0,
- Arg1 arg1,
- Arg2 arg2,
- Arg3 arg3,
- Arg4 arg4) :
- m_callback(callback),
- m_arg0(arg0),
- m_arg1(arg1),
- m_arg2(arg2),
- m_arg3(arg3),
- m_arg4(arg4)
- {
- }
-
- virtual void Exec() const
- {
- Assert(m_callback != NULL);
- m_callback(m_arg0, m_arg1, m_arg2, m_arg3, m_arg4);
- }
-};
-
-/**
- * @brief User callback logic
- */
-class UserCallbackLogic
-{
- public:
- virtual ~UserCallbackLogic();
-
- /**
- * This method send user callback from separate context
- */
- void EmitUserCallback(const UserCallbackCall *callback);
-
- private:
- UserCallbackLogic();
-
- friend class UserCallbackController;
-};
-
-#endif // WIDGET_LOGIC_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_controller.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for widget controller
- */
-#include <widget_controller.h>
-#include <dpl/log/log.h>
-#include <dpl/singleton_impl.h>
-#include <common_error.h>
-#include <widget_model.h>
-#include <appcore-common.h>
-
-IMPLEMENT_SINGLETON(WidgetController)
-
-WidgetController::WidgetController()
-{
-}
-
-void WidgetController::OnEventReceived(
- const WidgetControllerEvents::InitializeEvent & event)
-{
- InitStatusStruct statusStruct = event.GetArg0();
- m_widgetLogic.initialize(statusStruct);
-}
-
-void WidgetController::OnEventReceived(
- const WidgetControllerEvents::DeinitializeEvent & /*event*/)
-{
- m_widgetLogic.deinitialize();
-}
-
-void WidgetController::OnEventReceived(
- const WidgetControllerEvents::LaunchWidgetIdEvent &event)
-{
- WidgetHandle widgetHandle = event.GetArg0();
- WidgetLaunchStruct launchStruct = event.GetArg1();
-
- LogDebug("Launching id-base widget...");
-
-
- m_widgetLogic.createWidgetModel(widgetHandle);
-
- // Find widget model
- WidgetModel *widgetModel = m_widgetLogic.getWidgetModel();
-
- if (widgetModel == NULL) {
- LogError("Unknown widget id. Cannot find widget model.");
-
- LaunchFinishedCallbackCall* callback = new LaunchFinishedCallbackCall(
- launchStruct.launchFinishedCallback,
- NULL,
- widgetHandle,
- CommonError::HandleNotFound,
- _("IDS_BR_BODY_NO_RESULTS_FOUND"),
- launchStruct.userParam);
-
- POST_USER_CALLBACK(callback);
-
- return;
- }
-
- // Launch widget model
- m_widgetLogic.launchWidget(launchStruct);
-}
-
-void WidgetController::OnEventReceived(
- const WidgetControllerEvents::KillWidgetIdEvent &event)
-{
- WidgetHandle widgetHandle = event.GetArg0();
- OperationStatusStruct operation = event.GetArg1();
-
- LogDebug("Killing id-base widget...");
-
- // Find widget model
- WidgetModel *widgetModel = m_widgetLogic.getWidgetModel();
-
- if (widgetModel == NULL) {
- LogError("Unknown widget id. Cannot find widget model.");
-
- POST_USER_CALLBACK(new OperationStatusCallbackCall(
- operation.operationStatusCallback,
- widgetHandle,
- CommonError::HandleNotFound,
- operation.userParam));
-
- return;
- }
-
- // Kill widget model
- m_widgetLogic.killWidget(operation);
-}
-
-void WidgetController::OnEventReceived(
- const WidgetControllerEvents::SuspendWidgetEvent &event)
-{
- LogDebug("Pausing widget");
- WidgetHandle widgetHandle = event.GetArg0();
- OperationStatusStruct operation = event.GetArg1();
-
- // Find widget model
- WidgetModel *widgetModel = m_widgetLogic.getWidgetModel();
-
- if (widgetModel == NULL) {
- LogError("Unknown widget id. Cannot find widget model.");
-
- POST_USER_CALLBACK(new OperationStatusCallbackCall(
- operation.operationStatusCallback,
- widgetHandle,
- CommonError::HandleNotFound,
- operation.userParam));
-
- return;
- }
-
- // Suspend widget model
- m_widgetLogic.suspendWidget(operation);
-}
-
-void WidgetController::OnEventReceived(
- const WidgetControllerEvents::ResumeWidgetEvent &event)
-{
- LogDebug("Resuming widget");
- WidgetHandle widgetHandle = event.GetArg0();
- OperationStatusStruct operation = event.GetArg1();
-
- // Find widget model
- WidgetModel *widgetModel = m_widgetLogic.getWidgetModel();
-
- if (widgetModel == NULL) {
- LogError("Unknown widget id. Cannot find widget model.");
-
- POST_USER_CALLBACK(new OperationStatusCallbackCall(
- operation.operationStatusCallback,
- widgetHandle,
- CommonError::HandleNotFound,
- operation.userParam));
-
- return;
- }
-
- // Resume widget model
- m_widgetLogic.resumeWidget(operation);
-}
-
-void WidgetController::OnEventReceived(
- const WidgetControllerEvents::ResetWidgetEvent &event)
-{
- std::string appService = event.GetArg1();
-
- // Find widget model
- WidgetModel *widgetModel = m_widgetLogic.getWidgetModel();
-
- if (widgetModel == NULL) {
- LogError("Cannot get widget model.");
- return;
- }
-
- // Launch widget model
- m_widgetLogic.resetWidget(appService);
-}
-
-void WidgetController::OnEventReceived(
- const WidgetControllerEvents::getWidgetModelEvent &event)
-{
- WidgetModel **ret = event.GetArg0();
-
- *ret = m_widgetLogic.getWidgetModel();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_controller.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Header file for widget controller
- */
-#ifndef WIDGET_CONTROLLER_H
-#define WIDGET_CONTROLLER_H
-
-#include <widget_launch_struct.h>
-#include <widget_logic.h>
-#include <dpl/singleton.h>
-#include <dpl/event/controller.h>
-#include <dpl/generic_event.h>
-#include <dpl/type_list.h>
-#include <string>
-
-class WidgetModel;
-
-namespace WidgetControllerEvents {
-
-/**
- * Initialize event
- *
- * @brief This event causes initialization of view logic.
- */
-DECLARE_GENERIC_EVENT_1(InitializeEvent, InitStatusStruct)
-/**
- * Denitialize WidgetLogic event
- *
- * @brief This event causes deinitialization of widget logic. It
- * includes deinitialization of DB and/or saving all widgets present logic.
- */
-DECLARE_GENERIC_EVENT_0(DeinitializeEvent)
-
-/**
- * Launch widget event
- *
- * @brief This event causes launch of widget. Before launch a confirmation window
- * may be optionally displayed as ACE needs it. This is wigdet id based version.
- */
-DECLARE_GENERIC_EVENT_2(LaunchWidgetIdEvent, WidgetHandle, WidgetLaunchStruct) // (widgetHandle, callback)
-
-/**
- * Kill widget event
- *
- * @brief This event causes kill of widget. This is widget Id based version.
- **/
-DECLARE_GENERIC_EVENT_2(KillWidgetIdEvent, WidgetHandle, OperationStatusStruct) // (widgetHandle)
-
-/**
- * Suspend widget
- *
- * @brief This event causes widget to suspend java script
- **/
-DECLARE_GENERIC_EVENT_2(SuspendWidgetEvent, WidgetHandle, OperationStatusStruct) // (widgetHandle)
-
-/**
- * Resume widget
- *
- * @brief This event causes widget to resume java script
- **/
-DECLARE_GENERIC_EVENT_2(ResumeWidgetEvent, WidgetHandle, OperationStatusStruct) // (widgetHandle)
-
-/**
- * Reset widget
- *
- * @brief This event send bundle data
- **/
-DECLARE_GENERIC_EVENT_2(ResetWidgetEvent,
- WidgetHandle,
- std::string) // (widgetHandle)
-
-
-/**
- * check widget model event
- *
- * @brief This event causes checking if WidgetModel of specific WidgetHandle exists in wrt
- **/
-DECLARE_GENERIC_EVENT_1(getWidgetModelEvent,
- WidgetModel * *)
-
-} // namespace WidgetControllerEvents
-
-typedef DPL::TypeListDecl
- <
- WidgetControllerEvents::InitializeEvent,
- WidgetControllerEvents::DeinitializeEvent,
- WidgetControllerEvents::LaunchWidgetIdEvent,
- WidgetControllerEvents::KillWidgetIdEvent,
- WidgetControllerEvents::SuspendWidgetEvent,
- WidgetControllerEvents::ResumeWidgetEvent,
- WidgetControllerEvents::ResetWidgetEvent,
- WidgetControllerEvents::getWidgetModelEvent>::Type
-
-WidgetControllerEventsTypeList;
-
-// TODO rename it to Core::Controller or sth
-class WidgetController :
- public DPL::Event::Controller<WidgetControllerEventsTypeList>
-{
- protected:
- virtual void OnEventReceived(
- const WidgetControllerEvents::InitializeEvent &event);
- virtual void OnEventReceived(
- const WidgetControllerEvents::DeinitializeEvent &event);
- virtual void OnEventReceived(
- const WidgetControllerEvents::LaunchWidgetIdEvent &event);
- virtual void OnEventReceived(
- const WidgetControllerEvents::KillWidgetIdEvent &event);
- virtual void OnEventReceived(
- const WidgetControllerEvents::SuspendWidgetEvent &event);
- virtual void OnEventReceived(
- const WidgetControllerEvents::ResumeWidgetEvent &event);
- virtual void OnEventReceived(
- const WidgetControllerEvents::ResetWidgetEvent &event);
- virtual void OnEventReceived(
- const WidgetControllerEvents::getWidgetModelEvent &event);
-
- private:
- // Embedded logic
- WidgetLogic m_widgetLogic;
-
- WidgetController();
-
- friend class DPL::Singleton<WidgetController>;
-};
-
-typedef DPL::Singleton<WidgetController> WidgetControllerSingleton;
-
-#endif // WIDGET_CONTROLLER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_launch_struct.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for widget launch struct
- */
-#ifndef WIDGET_LAUNCH_STRUCT_H
-#define WIDGET_LAUNCH_STRUCT_H
-
-#include <user_callback_controller.h>
-#include <common_error.h>
-#include <dpl/assert.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <wrt_db_types.h>
-/**
- * @brief User parameters
- */
-typedef void *UserParam;
-
-/**
- * @brief User parameters passed to view
- *
- * View implementation dependent.
- * Pid is passed here
- */
-typedef void *LaunchContext;
-
-/**
- * @brief User parameters passed from view
- *
- * View implementation dependent.
- */
-typedef void *ResultContext;
-
-/**
- * @brief Lauch has finished callback
- *
- * Occurs when view has launched model view, and resulting context is available.
- * Note: Do not make any assumption wich thread this callback is called from.
- */
-typedef void (*LaunchFinishedCallback)(ResultContext context,
- WidgetHandle widgetHandle,
- CommonError::Type result,
- const std::string& errorMsg,
- UserParam userParam);
-
-typedef void (*OperationStatusCallback)(WidgetHandle widgetHandle,
- CommonError::Type result,
- UserParam userParam);
-
-typedef void (*InitStatusCallback)(CommonError::Type status, UserParam data);
-
-/**
- * @brief Widget launch structure
- *
- * Structure describing parameters passed to widget model view.
- * Contains view implementation specific handle and user parameter
- * passed to LaunchFinishedCallback.
- */
-struct WidgetLaunchStruct
-{
- LaunchContext launchContext;
- LaunchFinishedCallback launchFinishedCallback;
- UserParam userParam;
- std::string widgetArg; //TODO make it Optional<String>
-
- WidgetLaunchStruct() :
- launchContext(NULL),
- launchFinishedCallback(NULL),
- userParam(NULL)
- {
- }
-
- WidgetLaunchStruct(LaunchContext lc,
- LaunchFinishedCallback lfc,
- UserParam us,
- const std::string &arg) :
- launchContext(lc),
- launchFinishedCallback(lfc),
- userParam(us),
- widgetArg(arg)
- {
- }
-};
-
-typedef GenericUserCallbackCall5<LaunchFinishedCallback, ResultContext,
- WidgetHandle, CommonError::Type, std::string,
- void *> LaunchFinishedCallbackCall;
-
-/**
- * @brief Operation status structure
- */
-struct OperationStatusStruct
-{
- OperationStatusCallback operationStatusCallback;
- UserParam userParam;
-
- OperationStatusStruct() :
- operationStatusCallback(NULL),
- userParam(NULL)
- {
- }
-
- OperationStatusStruct(OperationStatusCallback cb,
- UserParam userParam) :
- operationStatusCallback(cb),
- userParam(userParam)
- {
- }
-};
-
-typedef GenericUserCallbackCall3<OperationStatusCallback, WidgetHandle,
- CommonError::Type,
- void *> OperationStatusCallbackCall;
-
-/**
- * @brief Initialization status structure
- */
-struct InitStatusStruct
-{
- InitStatusCallback initStatusCallback;
- UserParam userParam;
-
- InitStatusStruct() :
- initStatusCallback(NULL),
- userParam(NULL)
- {
- }
-
- InitStatusStruct(InitStatusCallback cb,
- UserParam userParam) :
- initStatusCallback(cb),
- userParam(userParam)
- {
- }
-};
-
-typedef GenericUserCallbackCall2<InitStatusCallback, CommonError::Type, void *>
- InitStatusCallbackCall;
-
-#endif // WIDGET_LAUNCH_STRUCT_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_localize_model.cpp
- * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version 1.0
- * @brief Widget localize localizes WidgetModel from system configuration
- */
-
-#include <algorithm>
-
-#include <dpl/foreach.h>
-#include <dpl/log/log.h>
-
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <widget_model.h>
-#include <dpl/localization/w3c_file_localization.h>
-#include <dpl/localization/localization_utils.h>
-
-namespace Domain {
-
-void localizeWidgetModel(const std::shared_ptr<WidgetModel>& model)
-{
- using namespace WrtDB;
-
- LogDebug("Updating model with localized info ...");
- LanguageTagsList tags = LocalizationUtils::GetUserAgentLanguageTags();
- DPL::OptionalString defaultlocale = model->defaultlocale.Get();
- LogDebug("Default locale for widget: " << defaultlocale);
- if (!!defaultlocale &&
- std::find(tags.begin(), tags.end(), *defaultlocale) == tags.end())
- {
- if (tags.size() < 2) {
- tags.push_front(*defaultlocale);
- } else {
- LanguageTagsList::iterator placeToInsert = tags.end();
- --placeToInsert;
- if (*placeToInsert != L"") { ++placeToInsert; }
- tags.insert(placeToInsert, *defaultlocale);
- }
- }
- LogDebug("Setting runtime widget locale:");
- FOREACH(it, tags) {
- LogDebug("Locale: " << *it);
- }
- model->LanguageTags.Set(tags);
-
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(model->Handle.Get());
-
- model->Name.Set(localizedInfo.name);
- model->ShortName.Set(localizedInfo.shortName);
- model->Description.Set(localizedInfo.description);
- model->License.Set(localizedInfo.license);
- model->LicenseHref.Set(localizedInfo.licenseHref);
- model->StartURL.Set(W3CFileLocalization::getStartFile(model->Handle.Get()));
- model->Icon.Set(W3CFileLocalization::getIcon(model->Handle.Get()));
- LogDebug("... finished");
- OptionalWidgetStartFileInfo info =
- W3CFileLocalization::getStartFileInfo(
- model->Handle.Get(),
- model->LanguageTags.Get());
- model->StartFileInfo.Set(info);
-}
-
-} //Namespace Domain
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_localize_model.h
- * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version 1.0
- * @brief Widget localization localizes WidgetModel from current settings
- */
-#ifndef WRT_ENGINE_SRC_DOMAIN_WIDGET_LOCALIZE_MODEL_H_
-#define WRT_ENGINE_SRC_DOMAIN_WIDGET_LOCALIZE_MODEL_H_
-
-#include <memory>
-
-#include <widget_model.h>
-
-namespace Domain {
-
-/**
- * @brief Localize widget model
- *
- * Function is using localization utils and W3C file localization
- * to process current language settingto enhance widget model with
- * localized properties.
- *
- * @param[in] model
- */
-void localizeWidgetModel(const std::shared_ptr<WidgetModel>& model);
-
-} //Namespace Domain
-
-#endif // ifndef WRT_ENGINE_SRC_DOMAIN_WIDGET_LOCALIZE_MODEL_H_
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_logic.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for widget logic
- */
-#include "widget_logic.h"
-#include <string>
-#include <appcore-common.h>
-#include <dpl/log/log.h>
-#include <dpl/assert.h>
-#include <dpl/dbus/dbus_client.h>
-#include <widget_logic.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <child_protection_agent.h>
-#include <global_logic.h>
-#include <dpl/utils/wrt_global_settings.h>
-#include <dpl/wrt-dao-rw/global_dao.h>
-#include <dpl/popup/popup_controller.h>
-#include <main_thread.h>
-#include <dpl/wrt-dao-ro/WrtDatabase.h>
-#include <libxml/parser.h>
-#include <dpl/vcore/vcore/VCore.h>
-#include <dpl/localization/localization_utils.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <security_controller.h>
-#include <view_logic.h>
-#include <plugin_logic.h>
-#ifdef WRT_SMACK_ENABLED
-#include <privilege-control.h>
-#endif
-
-#include "ocsp_server_api.h"
-#include "security_daemon_dbus_config.h"
-#include "widget_deserialize_model.h"
-#include "widget_localize_model.h"
-
-namespace { //Anonymous
-
-class Popups : DPL::Popup::PopupControllerUser
-{
- public:
- void displayCertificateRevokedPopup()
- {
- using namespace DPL::Popup;
- CtrlPopupPtr popup =
- PopupControllerSingleton::Instance().CreatePopup();
- popup->SetTitle(_("IDS_IM_POP_WIDGET_REVOKED_TITLE"));
- popup->Append(new PopupObject::Label(
- _("IDS_IM_POP_WIDGET_REVOKED_ERROR")));
- popup->Append(new PopupObject::Button(_("IDS_IM_BUTTON_OK"), 0));
- ListenForAnswer(popup);
-
- PopupAnswerCallback cb =
- MakeAnswerCallback(this, &Popups::dummyCallback);
-
- ShowPopupEvent event(popup, cb, DPL::Event::UNDEFINED_LOOP_HANDLE);
- CONTROLLER_POST_EVENT(PopupController, event);
- }
-
- void dummyCallback(const DPL::Popup::AnswerCallbackData& /*data*/)
- {
- }
-};
-
-std::string cutOffFileName(const std::string& path)
-{
- size_t found = path.find_last_of("/");
- if (found == std::string::npos) {
- return path;
- } else {
- return path.substr(0, found);
- }
-}
-
-bool isDir(const std::string& path)
-{
- struct stat st;
- if (0 == stat(path.c_str(), &st) && S_ISDIR(st.st_mode)) {
- return true;
- }
- LogError("Cannot access directory [ " << path << " ]");
- return false;
-}
-
-bool checkPaths()
-{
- using namespace WrtDB;
- using namespace WrtDB::GlobalConfig;
-
- bool if_ok = true;
- if_ok &= (isDir(cutOffFileName(GetWrtDatabaseFilePath())));
- if (!if_ok) {
- LogError("Path <" << GetWrtDatabaseFilePath() << "> does not exist.");
- }
-
- if_ok &= (isDir(GetDevicePluginPath()));
- if (!if_ok) {
- LogError("Path <" << GetDevicePluginPath() << "> does not exist.");
- }
-
- if_ok &= (isDir(GetFactoryInstalledWidgetPath()));
- if (!if_ok) {
- LogError("Path <" << GetFactoryInstalledWidgetPath() <<
- "> does not exist.");
- }
-
- if_ok &= (isDir(GetUserInstalledWidgetPath()));
- if (!if_ok) {
- LogError("Path <" << GetUserInstalledWidgetPath() <<
- "> does not exist.");
- }
- return if_ok;
-}
-
-Popups popupsDisplayer;
-
-const std::string ACCESS_DENIED = _("IDS_BR_POP_ACCESS_DENIED");
-const std::string ALREADY_RUNNING = _("IDS_BR_POP_ALREADY_RUNNING");
-const std::string INVALID_LOCALE = _("IDS_IM_POP_INVALID_WIDGET_LOCALE");
-const std::string STILL_AUTHORIZING = _("IDS_IM_POP_AUTHORIZING_ING_ATNT");
-
-} // namespace anonymous
-
-using namespace CommonError;
-
-WidgetLogic::WidgetLogic()
-{
-}
-
-WidgetLogic::~WidgetLogic()
-{
- // Must be deinitialized prior to exit
- Assert(!m_widgetModelPtr);
-}
-
-void WidgetLogic::initialize(InitStatusStruct statusStruct)
-{
- Try {
- // Check paths
- if (!checkPaths()) {
- initFinished(statusStruct, NoPath);
- return;
- }
-
- Assert(!m_widgetModelPtr &&
- "WidgetModel should not be present at this stage");
-
- // connect databases
- ADD_PROFILING_POINT("attach databases",
- "start");
-
- MainThreadSingleton::Instance().AttachDatabases();
-
- ADD_PROFILING_POINT("attach databases",
- "stop");
-
- ADD_PROFILING_POINT("checking_wrt_table_version", "start");
- //checking for correct DB version
-
-// if (!WrtDB::WrtDatabase::CheckTableExist(DB_CHECKSUM_STR)) {
-// LogError("WRONG VERSION OF WRT DATABASE");
-// initFinished(statusStruct, DatabaseFailure);
-// return;
-// }
- LogWarning("Database check version is not implemented!");
- ADD_PROFILING_POINT("checking_wrt_table_version", "stop");
-
- ADD_PROFILING_POINT("xml_parser_init", "start");
- xmlInitParser();
- ADD_PROFILING_POINT("xml_parser_init", "stop");
-
- // Initialize popup manager
- ADD_PROFILING_POINT("popup_manager_init", "start");
- DPL::Popup::PopupManagerSingleton::Instance().Initialize(
- DPL::Popup::PopupRendererPtr(new DPL::Popup::PopupRenderer));
- ADD_PROFILING_POINT("popup_manager_init", "stop");
-
- // Initialize Language Subtag registry
- ADD_PROFILING_POINT("language_rst_init", "start");
- LocalizationUtils::Initialize();
- ADD_PROFILING_POINT("language_rst_init", "stop");
-
- // Initialize webkit
- ewk_init();
-
- // Initialize things in ViewLogic
- ADD_PROFILING_POINT("view_logic_init", "start");
- ViewLogicSingleton::Instance().initialize();
- ADD_PROFILING_POINT("view_logic_init", "stop");
-
- // Initialize ValidationCore
- ValidationCore::VCoreInit(
- std::string(WrtDB::GlobalConfig::GetFingerprintListFile()),
- std::string(WrtDB::GlobalConfig::GetFingerprintListSchema()),
- std::string(WrtDB::GlobalConfig::GetVCoreDatabaseFilePath()));
-
- // Security Logic initialization
- ADD_PROFILING_POINT("security_controller_init", "start");
- CONTROLLER_POST_SYNC_EVENT(
- SecurityController,
- SecurityControllerEvents::InitializeSyncEvent());
- ADD_PROFILING_POINT("security_controller_init", "stop");
-
-#ifdef USE_DNET
- // Register Network Client
- ADD_PROFILING_POINT("net_init", "start");
- NetSingleton::Instance().Register();
- ADD_PROFILING_POINT("net_init", "stop");
-#endif
-
- ADD_PROFILING_POINT("wrt_init",
- "stop",
- "starting WebRuntime Initialization");
-
- LogInfo("[WRT-API] WRT INITIALIZATION CALLBACK");
- initFinished(statusStruct, WrtSuccess);
- }
- catch (const DPL::Exception& ex)
- {
- LogError("Internal Error during Init:");
- DPL::Exception::DisplayKnownException(ex);
- initFinished(statusStruct, Unknown);
- }
-}
-
-void WidgetLogic::deinitialize()
-{
- // Terminate things in ViewLogic
- ViewLogicSingleton::Instance().terminate();
-
- if (m_widgetModelPtr) {
- destroyWidgetModel();
- }
-
- // Deinitialize popup manager
- DPL::Popup::PopupManagerSingleton::Instance().Deinitialize();
-
- // Deinitialize Security Logic
- CONTROLLER_POST_SYNC_EVENT(
- SecurityController,
- SecurityControllerEvents::
- TerminateSyncEvent());
-
-#ifdef USE_DNET
- // Deregister Network Client
- NetSingleton::Instance().Deregister();
-#endif
-
- MainThreadSingleton::Instance().DetachDatabases();
-
- LogInfo("Cleanup libxml2 global values.");
- xmlCleanupParser();
-
- // deinitialize webkit
- ewk_shutdown();
-
- // Perform libraries unload
- LogInfo("Unloading plugins");
- PluginLogicSingleton::Instance().performLibrariesUnload();
-}
-
-void WidgetLogic::launchWidget(const WidgetLaunchStruct &originalLaunchStruct)
-{
- Assert(m_widgetModelPtr);
- WidgetModel* widgetModel = m_widgetModelPtr.get();
-
-#ifdef WRT_SMACK_ENABLED
- // TODO - this should be in the very first line of the process's main()
- // for security reasons; but for now it is easier to place here because
- // here the pkg name is already known; we don't struggle to move it
- // near the start of main() because we don't know yet if this will
- // stay in this process at all: it may be moved to AUL altogether
- set_process_config(DPL::ToUTF8String(widgetModel->PkgName.Get()).c_str());
-#endif
-
- // WAC Waikiki Beta Release Core Specification: Widget Runtime
- // 10 Dec 2010
- //
- // WR-4710 The WRT MUST enable debug functions only for WAC test widgets
- // i.e. the functions must not be usable for normal WAC widgets, even when
- // a WAC test widget is executing.
- ADD_PROFILING_POINT("DeveloperModeCheck", "start");
-
- if (!checkWACTestCertififedWidget())
- {
- launchFailed(originalLaunchStruct, AccessDenied, ACCESS_DENIED);
- return;
- }
- ADD_PROFILING_POINT("DeveloperModeCheck", "stop");
-
- ADD_PROFILING_POINT("ChildProtectedCheck", "start");
- if (ChildProtection::LogicSingleton::Instance().IsParentalModeActive()) {
- ChildProtection::Logic& agent =
- ChildProtection::LogicSingleton::Instance();
-
- if (!agent.IsWidgetAllowed(widgetModel)) {
- // Unregister widgetModel
- agent.Unregister(widgetModel);
-
- launchFailed(originalLaunchStruct, AccessDenied, ACCESS_DENIED);
- return;
- }
- }
- ADD_PROFILING_POINT("ChildProtectedCheck", "stop");
-
- WidgetLaunchStruct launchStruct = originalLaunchStruct;
-
- LogDebug("Launching widget...");
-
- if (widgetModel->State.Get() == WidgetState_Running) {
- LogWarning("Widget already running");
-
- launchFailed(launchStruct, AlreadyRunning, ALREADY_RUNNING);
- return;
- }
-
- if (widgetModel->StartURL.Get().IsNull()) {
- LogWarning("Widget is invalid in currently selected locales");
-
- launchFailed(launchStruct, InvalidLanguage, INVALID_LOCALE);
- return;
- }
-
- if (widgetModel->State.Get() == WidgetState_Authorizing) {
- LogWarning("Widget already authorizing");
-
- launchFailed(launchStruct, StillAuthorizing, STILL_AUTHORIZING);
- return;
- }
-
- // Widget is not running, localized data can be updated
- Domain::localizeWidgetModel(m_widgetModelPtr);
- widgetModel->RunningName.Set(widgetModel->Name.Get());
- widgetModel->RunningIcon.Set(widgetModel->Icon.Get());
- widgetModel->RunningStartURL.Set(widgetModel->StartURL.Get());
- widgetModel->RunningShortName.Set(widgetModel->ShortName.Get());
- widgetModel->RunningDescription.Set(widgetModel->Description.Get());
- widgetModel->RunningLicense.Set(widgetModel->License.Get());
- widgetModel->RunningLicenseHref.Set(widgetModel->LicenseHref.Get());
- widgetModel->RunningStartFileInfo.Set(
- widgetModel->StartFileInfo.Get());
-
-
- // Change state to authorizing
- widgetModel->State.Set(WidgetState_Authorizing);
-
- LogInfo("Widget launch accepted. Entering running state");
-
- // Inform view controller about new widget model displaying
- ADD_PROFILING_POINT("OCSPCheck", "start");
-
- ValidationCore::WidgetVerificationStatus response;
- {
- DPL::DBus::Client dbusClient(RPC::SecurityDaemonConfig::OBJECT_PATH,
- RPC::SecurityDaemonConfig::SERVICE_NAME,
- RPC::OcspServerApi::INTERFACE_NAME);
- int intResponse;
- dbusClient.call(RPC::OcspServerApi::CHECK_ACCESS_METHOD,
- widgetModel->Handle.Get(),
- &intResponse);
- response = static_cast<ValidationCore::WidgetVerificationStatus>(
- intResponse);
- }
- ADD_PROFILING_POINT("OCSPCheck", "stop");
-
- if (response == ValidationCore::WIDGET_VERIFICATION_STATUS_GOOD) {
- // Enter running state
- widgetModel->State.Set(WidgetState_Running);
-
- // TODO introduce parallel UI preparation.
- ViewLogicSingleton::Instance().prepareView(widgetModel,
- originalLaunchStruct);
- ViewLogicSingleton::Instance().showWidget(widgetModel, launchStruct);
- } else {
- launchFailed(launchStruct, CertificateRevoked, ACCESS_DENIED);
- if (GlobalSettings::GetPopupsEnabledFlag()) {
- popupsDisplayer.displayCertificateRevokedPopup();
- }
- }
-}
-
-void WidgetLogic::killWidget(const OperationStatusStruct &operationStatus)
-{
- Assert(m_widgetModelPtr);
- WidgetModel* widgetModel = m_widgetModelPtr.get();
-
- LogDebug("Killing widget...");
-
- if (widgetModel->State.Get() == WidgetState_Stopped) {
- LogWarning("Widget already stopped");
-
- // Inform listener
- operationFinished(operationStatus, AlreadyStopped);
- return;
- }
-
- if (widgetModel->State.Get() == WidgetState_Authorizing) {
- Assert(false && "It is not possible in new architecture");
- }
-
- hideWidgetSend();
-
- // Stop widget model
- widgetModel->State.Set(WidgetState_Stopped);
-
- LogDebug("Widget killed");
-
- operationFinished(operationStatus, WrtSuccess);
-}
-
-void WidgetLogic::suspendWidget(const OperationStatusStruct &operationStruct)
-{
- Assert(m_widgetModelPtr);
- WidgetModel* widgetModel = m_widgetModelPtr.get();
-
- LogDebug("Pausing widget");
-
- if (widgetModel->State.Get() != WidgetState_Running) {
- LogWarning("Widget is not running to be suspended");
-
- // Inform listener
- operationFinished(operationStruct, AlreadyStopped);
- return;
- }
-
- ViewLogicSingleton::Instance().suspendWidget(widgetModel,operationStruct);
-
- widgetModel->State.Set(WidgetState_Suspended);
-}
-
-void WidgetLogic::resumeWidget(const OperationStatusStruct &operationStruct)
-{
- Assert(m_widgetModelPtr);
- WidgetModel* widgetModel = m_widgetModelPtr.get();
-
- LogDebug("Pausing widget");
-
- if (widgetModel->State.Get() != WidgetState_Suspended) {
- LogWarning("Widget is not suspended to be resumed");
-
- // Inform listener
- operationFinished(operationStruct, AlreadyRunning);
- return;
- }
-
- ViewLogicSingleton::Instance().resumeWidget(widgetModel, operationStruct);
-
- widgetModel->State.Set(WidgetState_Running);
-}
-
-void WidgetLogic::resetWidget(const std::string& appService)
-{
- LogInfo("resetWidget");
- Assert(m_widgetModelPtr);
- WidgetModel* widgetModel = m_widgetModelPtr.get();
-
- if (widgetModel->State.Get() != WidgetState_Suspended) {
- LogError("Widget is suspended to be reset");
- }
- ViewLogicSingleton::Instance().widgetWebkitReset(widgetModel,appService);
-}
-
-
-WidgetModel *WidgetLogic::getWidgetModel()
-{
- return m_widgetModelPtr.get();
-}
-
-void WidgetLogic::createWidgetModel(WidgetHandle widgetHandle)
-{
- Assert(!m_widgetModelPtr);
-
- if (WrtDB::WidgetDAO::isWidgetInstalled(widgetHandle))
- {
- m_widgetModelPtr = Domain::deserializeWidgetModel(widgetHandle);
- WidgetModel* model = m_widgetModelPtr.get();
-
- // Read DAO data
- WrtDB::WidgetDAO dao(widgetHandle);
-
- //Store ChildProtection data
- //
- if (ChildProtection::LogicSingleton::Instance().IsParentalModeActive()) {
- ChildProtection::Logic& agent =
- ChildProtection::LogicSingleton::Instance();
- agent.Register(model, dao.getChildProtection());
- agent.SetPowderDescription(model, dao.getPowderDescription());
- agent.SetPowderRules(model, WrtDB::GlobalDAO::GetPowderRules());
- agent.SetBlackList(model, WrtDB::GlobalDAO::GetAdultBlackList());
- }
-
- // Set localized data
- Domain::localizeWidgetModel(m_widgetModelPtr);
-
- WrtDB::WidgetAccessInfoList widgetAccessInfoList;
- // widgetAccessInfoList is output parameter
- dao.getWidgetAccessInfo(widgetAccessInfoList);
- model->AccessList.Set(widgetAccessInfoList);
-
- // Widget application service information data
- WidgetApplicationServiceList widgetApplicationServiceList;
- // widgetApplicationServiceList is output parameter
- dao.getAppServiceList(widgetApplicationServiceList);
- model->AppServiceList.Set(widgetApplicationServiceList);
-
- // Set Widget Settings
- WidgetSettings widgetSettings;
- dao.getWidgetSettings(widgetSettings);
- model->SettingList.Set(widgetSettings);
- }
-}
-
-void WidgetLogic::destroyWidgetModel()
-{
- Assert(m_widgetModelPtr);
-
- WidgetModel *widgetModel = m_widgetModelPtr.get();
-
- Assert(widgetModel->State.Get() == WidgetState_Stopped ||
- widgetModel->State.Get() == WidgetState_Uninstalling);
-
- //Clear ChildProtection data
- if (ChildProtection::LogicSingleton::Instance().IsParentalModeActive()) {
- ChildProtection::LogicSingleton::Instance().Unregister(widgetModel);
- }
-
- LogInfo("Widget Model is destroyed!");
-
- // Delete model
- m_widgetModelPtr.reset();
-}
-
-void WidgetLogic::hideWidgetSend()
-{
- Assert(m_widgetModelPtr);
- /* TODO
- * Widget could create nested loop.
- * We should close this nested loop before killing widget.
- */
- WidgetModel *widgetModel = m_widgetModelPtr.get();
-
- ViewLogicSingleton::Instance().hideWidget(widgetModel);
-
- widgetModel->State.Set(WidgetState_Stopped);
-}
-
-
-bool WidgetLogic::checkWACTestCertififedWidget()
-{
- Assert(!!m_widgetModelPtr);
- WidgetModel *widgetModel = m_widgetModelPtr.get();
- // WAC test widget
- // A widget signed with a WAC-issued test certificate as described in
- // Developer Mode.
-
- bool developerWidget = widgetModel->IsTestWidget.Get();
- bool developerMode =
- GlobalLogicSingleton::Instance().GetGlobalModel()->DeveloperMode.Get();
-
- LogDebug("Is WAC test widget: " << developerWidget);
- LogDebug("Is developer Mode: " << developerMode);
-
- if (developerWidget) {
- if(!developerMode)
- {
- LogError("WAC test certified developer widget is needed for developer mode");
- return false;
- }else{
- //TODO: WR-4660 (show popup about developer widget
- // during launch
- LogInfo("POPUP: THIS IS TEST WIDGET!");
- }
- }
- return true;
-}
-
-void WidgetLogic::initFinished(const InitStatusStruct &statusStruct,
- CommonError::Type error)
-{
- POST_USER_CALLBACK(
- new InitStatusCallbackCall(
- statusStruct.initStatusCallback,
- error,
- statusStruct.userParam));
-}
-
-void WidgetLogic::launchFailed(const WidgetLaunchStruct &originalLaunchStruct,
- CommonError::Type error,
- const std::string& message)
-{
- POST_USER_CALLBACK(
- new LaunchFinishedCallbackCall(
- originalLaunchStruct.launchFinishedCallback,
- NULL,
- m_widgetModelPtr->Handle.Get(),
- error,
- message,
- originalLaunchStruct.userParam));
-}
-
-void WidgetLogic::operationFinished(
- const OperationStatusStruct &operationStruct,
- CommonError::Type error)
-{
- POST_USER_CALLBACK(
- new OperationStatusCallbackCall(
- operationStruct.operationStatusCallback,
- m_widgetModelPtr->Handle.Get(),
- error,
- operationStruct.userParam));
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_logic.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for widget logic
- */
-#ifndef WIDGET_LOGIC_H
-#define WIDGET_LOGIC_H
-
-#include <string>
-#include <memory>
-#include <dpl/noncopyable.h>
-#include <vcore/VerificationStatus.h>
-#include <widget_model.h>
-#include <widget_launch_struct.h>
-#include <wrt_db_types.h>
-
-/**
- * @brief Widget logic main singleton
- *
- * All widget related logic is processed in WidgetLogic.
- *
- * WidgetLogic is initialized by invoking Initialize method and is deinitialized
- * on application exit by invoking Deinitialize method. WidgetModel is created
- * when launchWidget method is invoked basing on information contained in
- * database (reading is done with help of WidgetDAO). All operations on
- * WidgetModel should be invoked by posting proper event to widget controller
- * (if the command comes from external source), or by directly calling
- * WidgetLogic method.
- */
-// TODO rename it to Core::Logic or sth
-class WidgetLogic : public DPL::Noncopyable
-{
- private:
- std::shared_ptr<WidgetModel> m_widgetModelPtr;
-
- public:
- /**
- * @brief Internal. Creates widget model associated with selected
- * WidgetHandle
- *
- * This method also causes that WidgetLogic starts to listen
- * for WidgetModel changes.
- */
- void createWidgetModel(WidgetHandle widgetHandle);
-
- /**
- * @brief Internal. Destroy widget model
- *
- * Removes all listeners from widget model and deletes all allocated memory.
- */
- void destroyWidgetModel();
-
- void hideWidgetSend();
-
- bool checkWACTestCertififedWidget();
-
- public:
- virtual ~WidgetLogic();
-
- /**
- * @brief Initialize widget logic
- *
- * Must be called exactly once, at startup.
- */
- void initialize(InitStatusStruct statusStruct);
-
- /**
- * @brief Deinitialize widget logic
- *
- * Must be called exactly once, at exit.
- */
- void deinitialize();
-
- /**
- * This method launches the specified widget
- *
- * @param[in] launchStruct Launch parameters, passed to view
- */
- void launchWidget(const WidgetLaunchStruct &launchStruct);
-
- /**
- * This method removes the specified widget
- *
- */
- void killWidget(const OperationStatusStruct &operationStruct);
-
- /**
- * This method suspends widget java script
- *
- * @param[in] operationStruct struct with callback data.
- */
- void suspendWidget(const OperationStatusStruct &operationStruct);
-
- /**
- * This method resumes widget java script
- *
- * @param[in] operationStruct struct with callback data.
- */
- void resumeWidget(const OperationStatusStruct &operationStruct);
-
- void resetWidget(const std::string& bundleData);
- /**
- * This method returns the WidgetModel according to the specified
- * application id.
- *
- * @return The WidgetModel if the WidgetModel with the @c appId does not
- * exists returns NULL.
- */
- WidgetModel *getWidgetModel();
-
- private:
- WidgetLogic();
-
- // user callback helper methods
- void initFinished(const InitStatusStruct &statusStruct,
- CommonError::Type error);
- void launchFailed(const WidgetLaunchStruct &originalLaunchStruct,
- CommonError::Type error,
- const std::string& message);
- void operationFinished(const OperationStatusStruct &operationStruct,
- CommonError::Type error);
-
- friend class WidgetController;
-};
-
-#endif // WIDGET_LOGIC_H
+++ /dev/null
-Collective headers for main libraries (EFL and WebKit)
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#pragma GCC system_header
-
-#include <Edje.h>
-#include <Ecore.h>
-#include <Elementary.h>
-#include <Ecore_X.h>
-#include <Ecore_Evas.h>
-#include <Ecore_X_Atoms.h>
-#include <Evas.h>
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#pragma GCC system_header
-
-#include <EWebKit.h>
-#include <ewk_view.h>
-#include <JavaScriptCore/JavaScript.h>
-#include <JavaScriptCore/JSObjectRef.h>
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file global_logic.cpp
- * @author Lukasz Marek (l.marek@samgsung.com)
- * @version
- * @brief
- */
-
-#include "global_logic.h"
-
-#include <dpl/singleton_impl.h>
-IMPLEMENT_SINGLETON(GlobalLogic)
-
-GlobalLogic::GlobalLogic()
-{
-}
-
-GlobalLogic::~GlobalLogic()
-{
-}
-
-GlobalModel* GlobalLogic::GetGlobalModel() const
-{
- FREE_LOGIC_LOCK
- static GlobalModel globalLogic;
- return &globalLogic;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file global_logic.h
- * @author Lukasz Marek (l.marek@samgsung.com)
- * @version
- * @brief
- */
-
-#include <dpl/singleton.h>
-
-#include <global_model.h>
-#include <FreeLogic.h>
-
-class GlobalLogic : public FreeLogic
-{
- public:
- GlobalModel* GetGlobalModel() const;
-
- private:
- GlobalLogic();
- ~GlobalLogic();
-
- friend class DPL::Singleton<GlobalLogic>;
-};
-
-typedef DPL::Singleton<GlobalLogic> GlobalLogicSingleton;
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file global_model.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- */
-#include "global_model.h"
-#include <dpl/wrt-dao-rw/global_dao.h>
-
-using namespace WrtDB;
-
-GlobalModel::GlobalModel() :
- HomeNetworkAccess(this,
- &GlobalModel::HomeNetworkAccessReadProperty,
- &GlobalModel::HomeNetworkAccessWriteProperty),
- RoamingNetworkAccess(this,
- &GlobalModel::RoamingNetworkAccessReadProperty,
- &GlobalModel::RoamingNetworkAccessWriteProperty),
- ParentalMode(this,
- &GlobalModel::readParentalMode,
- &GlobalModel::writeParentalMode),
- DeveloperMode(this,
- &GlobalModel::ReadDeveloperMode,
- &GlobalModel::WriteDeveloperMode),
- SecureByDefault(this,
- &GlobalModel::ReadSecureByDefault,
- &GlobalModel::WriteSecureByDefault),
- ComplianceMode(this,
- &GlobalModel::readComplianceMode,
- &GlobalModel::writeComplianceMode),
- ComplianceFakeImei(this,
- &GlobalModel::readComplianceFakeImei,
- &GlobalModel::writeComplianceFakeImei),
- ComplianceFakeMeid(this,
- &GlobalModel::readComplianceFakeMeid,
- &GlobalModel::writeComplianceFakeMeid)
-{
-}
-
-GlobalModel::NetworkAccessMode GlobalModel::HomeNetworkAccessReadProperty(
- DPL::Event::Model* /*model*/)
-{
- switch (GlobalDAO::GetHomeNetworkDataUsage()) {
- case GlobalDAO::NEVER_CONNECT:
- return GlobalModel::NEVER_CONNECT;
- case GlobalDAO::ALWAYS_ASK:
- return GlobalModel::ALWAYS_ASK;
- case GlobalDAO::CONNECT_AUTOMATICALLY:
- return GlobalModel::CONNECT_AUTOMATICALLY;
- default:
- break;
- }
- LogWarning("using default value");
- return GlobalModel::ALWAYS_ASK;
-}
-
-void GlobalModel::HomeNetworkAccessWriteProperty(
- const GlobalModel::NetworkAccessMode &value,
- DPL::Event::Model* /*model*/)
-{
- switch (value) {
- case GlobalModel::NEVER_CONNECT:
- GlobalDAO::SetHomeNetworkDataUsage(GlobalDAO::NEVER_CONNECT);
- return;
- case GlobalModel::ALWAYS_ASK:
- GlobalDAO::SetHomeNetworkDataUsage(GlobalDAO::ALWAYS_ASK);
- return;
- case GlobalModel::CONNECT_AUTOMATICALLY:
- GlobalDAO::SetHomeNetworkDataUsage(
- GlobalDAO::CONNECT_AUTOMATICALLY);
- return;
- default:
- break;
- }
-}
-
-GlobalModel::NetworkAccessMode GlobalModel::RoamingNetworkAccessReadProperty(
- DPL::Event::Model* /*model*/)
-{
- switch (GlobalDAO::GetRoamingDataUsage()) {
- case GlobalDAO::NEVER_CONNECT:
- return GlobalModel::NEVER_CONNECT;
- case GlobalDAO::ALWAYS_ASK:
- return GlobalModel::ALWAYS_ASK;
- case GlobalDAO::CONNECT_AUTOMATICALLY:
- return GlobalModel::CONNECT_AUTOMATICALLY;
- default:
- break;
- }
- LogWarning("using default value");
- return GlobalModel::ALWAYS_ASK;
-}
-
-void GlobalModel::RoamingNetworkAccessWriteProperty(
- const GlobalModel::NetworkAccessMode &value,
- DPL::Event::Model* /*model*/)
-{
- switch (value) {
- case GlobalModel::NEVER_CONNECT:
- GlobalDAO::SetRoamingDataUsage(GlobalDAO::NEVER_CONNECT);
- return;
- case GlobalModel::ALWAYS_ASK:
- GlobalDAO::SetRoamingDataUsage(GlobalDAO::ALWAYS_ASK);
- return;
- case GlobalModel::CONNECT_AUTOMATICALLY:
- GlobalDAO::SetRoamingDataUsage(GlobalDAO::CONNECT_AUTOMATICALLY);
- return;
- default:
- break;
- }
-}
-
-bool GlobalModel::ReadDeveloperMode(DPL::Event::Model */*model*/)
-{
- return GlobalDAO::GetDeveloperMode();
-}
-
-void GlobalModel::WriteDeveloperMode(const bool &value,
- DPL::Event::Model */*model*/)
-{
- GlobalDAO::SetDeveloperMode(value);
-}
-
-bool GlobalModel::ReadSecureByDefault(DPL::Event::Model */*model*/)
-{
- return GlobalDAO::GetSecureByDefault();
-}
-
-void GlobalModel::WriteSecureByDefault(const bool &val,
- DPL::Event::Model */*model*/)
-{
- GlobalDAO::SetSecureByDefault(val);
-}
-
-bool GlobalModel::readComplianceMode(DPL::Event::Model * /* model */)
-{
- return GlobalDAO::getComplianceMode();
-}
-
-void GlobalModel::writeComplianceMode(const bool &value, DPL::Event::Model* /*model*/)
-{
- GlobalDAO::setComplianceMode(value);
-}
-
-std::string GlobalModel::readComplianceFakeImei(DPL::Event::Model * /* model */)
-{
- return GlobalDAO::getComplianceFakeImei();
-}
-
-void GlobalModel::writeComplianceFakeImei(const std::string &value,
- DPL::Event::Model* /*model*/)
-{
- GlobalDAO::setComplianceFakeImei(value);
-}
-
-std::string GlobalModel::readComplianceFakeMeid(DPL::Event::Model * /* model */)
-{
- return GlobalDAO::getComplianceFakeMeid();
-}
-
-void GlobalModel::writeComplianceFakeMeid(const std::string &value,
- DPL::Event::Model* /*model*/)
-{
- GlobalDAO::setComplianceFakeMeid(value);
-}
-
-bool GlobalModel::readParentalMode(DPL::Event::Model* /*model*/)
-{
- return GlobalDAO::GetParentalMode();
-}
-
-void GlobalModel::writeParentalMode(const bool& value, DPL::Event::Model* /*model*/)
-{
- GlobalDAO::SetParentalMode(value);
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file global_model.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- */
-#ifndef WRT_COMMON_GLOBAL_MODEL_H_
-#define WRT_COMMON_GLOBAL_MODEL_H_
-
-#include <string>
-#include <dpl/event/model.h>
-#include <dpl/event/property.h>
-#include <dpl/type_list.h>
-#include <dpl/shared_ptr.h>
-
-class GlobalModel : public DPL::Event::Model
-{
- public:
-
- /**
- * Network access mode enum.
- */
- enum NetworkAccessMode
- {
- NEVER_CONNECT,
- ALWAYS_ASK,
- CONNECT_AUTOMATICALLY
- };
-
- DPL::Event::Property<NetworkAccessMode,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamicCached> HomeNetworkAccess;
-
- DPL::Event::Property<NetworkAccessMode,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamicCached> RoamingNetworkAccess;
-
- DPL::Event::Property<bool,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamicCached> ParentalMode;
-
- DPL::Event::Property<bool,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamicCached> DeveloperMode;
-
- DPL::Event::Property<bool,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamicCached> SecureByDefault;
-
- DPL::Event::Property<bool,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamicCached> ComplianceMode;
-
- DPL::Event::Property<std::string,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamicCached> ComplianceFakeImei;
-
- DPL::Event::Property<std::string,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamicCached> ComplianceFakeMeid;
-
- GlobalModel();
-
- private:
- // Custom read write delegates
- static NetworkAccessMode HomeNetworkAccessReadProperty(DPL::Event::Model *model);
- static void HomeNetworkAccessWriteProperty(const NetworkAccessMode &value,
- DPL::Event::Model *model);
-
- static NetworkAccessMode RoamingNetworkAccessReadProperty(DPL::Event::Model *model);
- static void RoamingNetworkAccessWriteProperty(
- const NetworkAccessMode &value,
- DPL::Event::Model *model);
-
- static bool ReadDeveloperMode(DPL::Event::Model *model);
- static void WriteDeveloperMode(const bool &value,
- DPL::Event::Model *model);
-
- static bool ReadSecureByDefault(DPL::Event::Model *model);
- static void WriteSecureByDefault(const bool &val, DPL::Event::Model *model);
-
- static bool readComplianceMode(DPL::Event::Model *model);
- static void writeComplianceMode(const bool &value, DPL::Event::Model *model);
-
- static std::string readComplianceFakeImei(DPL::Event::Model *model);
- static void writeComplianceFakeImei(const std::string &value,
- DPL::Event::Model *model);
-
- static std::string readComplianceFakeMeid(DPL::Event::Model *model);
- static void writeComplianceFakeMeid(const std::string &value,
- DPL::Event::Model *model);
-
- static bool readParentalMode(DPL::Event::Model* model);
- static void writeParentalMode(const bool& value, DPL::Event::Model* model);
-};
-
-#endif // WRT_COMMON_GLOBAL_MODEL_H_
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-#
-# @file CMakeLists.txt
-# @author Lukasz Marek (l.marek@samsung.com)
-# @version 1.0
-#
-
-pkg_search_module(dpl REQUIRED dpl-efl)
-
-set(PLUGIN_LOADING_SRC_DIR ${PROJECT_SOURCE_DIR}/src/plugin-service/plugin-loading)
-set(PLUGIN_LOADING_SRC_DIR_EFL ${PLUGIN_LOADING_SRC_DIR}/efl)
-
-set(PLUGIN_LOADING_SOURCES
- ${PLUGIN_LOADING_SRC_DIR}/plugin_logic.cpp
- ${PLUGIN_LOADING_SRC_DIR}/plugin.cpp
- ${PLUGIN_LOADING_SRC_DIR}/plugin_model.cpp
- ${PLUGIN_LOADING_SRC_DIR}/explorer.cpp
- ${PLUGIN_LOADING_SRC_DIR}/js_object_declaration.cpp
- ${PLUGIN_LOADING_SRC_DIR}/js_function_declaration.cpp
- ${PLUGIN_LOADING_SRC_DIR}/js_object.cpp
- ${PLUGIN_LOADING_SRC_DIR}/plugin_iframe_support.cpp
- ${PLUGIN_LOADING_SRC_DIR_EFL}/javascript_functions.cpp
- ${PLUGIN_LOADING_SRC_DIR_EFL}/js_function_manager.cpp
- ${PLUGIN_LOADING_SRC_DIR_EFL}/webkit_interface.cpp
-)
-
-INCLUDE_DIRECTORIES(
- ${PLUGIN_LOADING_SRC_DIR}
- ${PLUGIN_LOADING_SRC_DIR_EFL}
-)
-
-ADD_LIBRARY(${TARGET_PLUGIN_LOADING_LIB} SHARED
- ${PLUGIN_LOADING_SOURCES}
-)
-
-SET_TARGET_PROPERTIES(${TARGET_PLUGIN_LOADING_LIB} PROPERTIES
- COMPILE_FLAGS -fPIC
- LINK_FLAGS "-Wl,--as-needed -Wl,--hash-style=both"
-)
-
-SET_TARGET_PROPERTIES(${TARGET_PLUGIN_LOADING_LIB} PROPERTIES
- COMPILE_FLAGS "-include profiling_util.h"
-)
-
-SET_TARGET_PROPERTIES(${TARGET_PLUGIN_LOADING_LIB} PROPERTIES
- SOVERSION ${PROJECT_VERSION}
-)
-
-target_link_libraries(${TARGET_PLUGIN_LOADING_LIB}
- ${dpl_LIBRARIES}
- ${TARGET_WRT_DAO_RO_LIB}
-)
-
-INSTALL(TARGETS ${TARGET_PLUGIN_LOADING_LIB}
- DESTINATION lib
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
- GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE
-)
-
-INSTALL(FILES
- plugin_logic.h
- plugin_model.h
- plugin.h
- explorer.h
- js_function_declaration.h
- js_function_manager.h
- js_object.h
- js_object_declaration.h
- webkit_interface.h
- plugin_iframe_support.h
- DESTINATION include/wrt-engine/plugin-service
-)
-
-# For wrt-plugins
-INSTALL(FILES
- wrt_plugin_export.h
- DESTINATION include/wrt-engine)
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file javascript_functions.cpp
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#include <dpl/log/log.h>
-#include <dpl/scoped_array.h>
-#include <javascript_functions.h>
-
-namespace JSCFunctions {
-
-std::string ConvertJSStringToStdString(JSStringRef value)
-{
- int nSize = JSStringGetLength(value) + 1;
- DPL::ScopedArray<char> textStr(new char[nSize]);
- JSStringGetUTF8CString(value, textStr.Get(), nSize);
- std::string ret = textStr.Get();
- return ret;
-}
-
-JSValueRef JavaScriptPrintProc(JSContextRef context,
- JSObjectRef /*object*/,
- JSObjectRef /*thisObject*/,
- size_t argumentCount,
- const JSValueRef arguments[],
- JSValueRef* exception)
-{
- if (argumentCount == 0 || !JSValueIsString(context, arguments[0])) {
- LogError("Argument is not string");
- return JSValueMakeUndefined(context);
- }
-
- JSStringRef textRef = JSValueToStringCopy(context, arguments[0], exception);
- int nSize = JSStringGetLength(textRef) + 1;
-
- DPL::ScopedArray<char> textStr(new char[nSize]);
-
- JSStringGetUTF8CString(textRef, textStr.Get(), nSize);
- LogDebug("\033[00;35m[jsPrint] " << textStr.Get());
-
- JSStringRelease(textRef);
- return JSValueMakeBoolean(context, true);
-}
-
-JSValueRef JavaScriptHookProc(
- JSContextRef context,
- JSObjectRef /*object*/,
- JSObjectRef /*thisObject*/,
- size_t argumentCount,
- const JSValueRef arguments[],
- JSValueRef* exception)
-{
- bool inError = false;
- if (argumentCount < 2 ||
- argumentCount > 3 ||
- !JSValueIsString(context, arguments[0]) ||
- !JSValueIsString(context, arguments[1])) {
-
- inError = true;
- }
-
- if (inError) {
- LogError("*********************************************");
- LogError("*********************************************");
- LogError("Cannot print test Result");
- LogError("*********************************************");
- LogError("*********************************************");
- return JSValueMakeUndefined(context);
- }
-
- std::string id, result, message;
- JSStringRef idRef = JSValueToStringCopy(context, arguments[0], exception);
- id = ConvertJSStringToStdString(idRef);
- JSStringRelease(idRef);
- JSStringRef idResult = JSValueToStringCopy(context,
- arguments[1],
- exception);
- result = ConvertJSStringToStdString(idResult);
- JSStringRelease(idResult);
-
- if (argumentCount == 3 && !JSValueIsString(context, arguments[2])) {
- JSStringRef idMessage = JSValueToStringCopy(context,
- arguments[0],
- exception);
- message = ConvertJSStringToStdString(idMessage);
- JSStringRelease(idMessage);
- }
-
- LogDebug("\033[00;35m***********************************************");
- LogDebug("\033[00;35m***********************************************");
- LogDebug("\033[00;35m TEST ID: " << id);
- LogDebug("\033[00;35m RESULT: " << result);
- LogDebug("\033[00;35m MESSAGE: " << message);
- LogDebug("\033[00;35m***********************************************");
- LogDebug("\033[00;35m***********************************************");
-
- return JSValueMakeBoolean(context, true);
-}
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file javascript_functions.h
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_EFL_JAVASCRIPT_FUNCTIONS_H_
-#define WRT_SRC_PLUGIN_SERVICE_EFL_JAVASCRIPT_FUNCTIONS_H_
-
-#include <JavaScriptCore/JavaScript.h>
-
-namespace JSCFunctions {
-JSValueRef JavaScriptPrintProc(
- JSContextRef context,
- JSObjectRef /*object*/,
- JSObjectRef /*thisObject*/,
- size_t argumentCount,
- const JSValueRef arguments[],
- JSValueRef * exception);
-JSValueRef JavaScriptHookProc(
- JSContextRef context,
- JSObjectRef /*object*/,
- JSObjectRef /*thisObject*/,
- size_t argumentCount,
- const JSValueRef arguments[],
- JSValueRef* exception);
-}
-
-#endif
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file js_function_manager.cpp
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#include <string>
-#include <js_function_manager.h>
-#include <javascript_functions.h>
-#include <dpl/singleton_impl.h>
-IMPLEMENT_SINGLETON(JsFunctionManager)
-
-using namespace std;
-
-namespace {
-const string JSPRINT_NAME = "jsPrint";
-const string JSPRINT_PARENTNAME = "GLOBAL_OBJECT";
-const string JSHOOK_NAME = "jsHook";
-}
-
-JsFunctionManager::FunctionsPtr
-JsFunctionManager::m_functions =
- FunctionsPtr(new JsFunctionManager::Functions());
-
-bool JsFunctionManager::initialize()
-{
- //jsPrint
- JSFunctionDeclarationPtr jsPrint(
- new JSFunctionDeclaration(
- JSPRINT_NAME,
- JSPRINT_PARENTNAME,
- reinterpret_cast<JSFunctionDeclaration::JSFunction>(
- JSCFunctions::JavaScriptPrintProc)));
-
- m_functions->push_back(jsPrint);
-
- JSFunctionDeclarationPtr jsHook(
- new JSFunctionDeclaration(JSHOOK_NAME, JSPRINT_PARENTNAME,
- reinterpret_cast<JSFunctionDeclaration::JSFunction> (
- JSCFunctions::JavaScriptHookProc)));
-
- m_functions->push_back(jsHook) ;
-
- return true;
-}
-
-JsFunctionManager::FunctionsPtr JsFunctionManager::GetFunctions()
-{
- static bool initialized = initialize();
- (void) initialized;
- return m_functions;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_webkit.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of webkit js plugin
- * accessing routines in EFL
- */
-#include <webkit_interface.h>
-#include <framework_ewebkit.h>
-#include <dpl/log/log.h>
-#include <dpl/scoped_array.h>
-#include <vector>
-#include <dpl/singleton_impl.h>
-#include <string>
-#include <dpl/foreach.h>
-#include <dpl/noncopyable.h>
-#include <JavaScriptCore/JavaScript.h>
-
-IMPLEMENT_SINGLETON(WebkitInterface)
-
-#define CHECK_JSVALUE_IS_UNDEFINED_RETURN(context, object, ret) \
- if (JSValueIsUndefined(context, object)) {\
- LogError("Object " << #object << " is undefined");\
- return ret;\
- }
-
-#define CHECK_JSOBJECT_IS_NULL_RETURN(object, ret) \
- if (!object) {\
- LogError("Object " << #object << " is NULL");\
- return ret;\
- }
-
-namespace {
-/**
- * Converts JSStringRef to std::string
- * */
-std::string toString(const JSStringRef& arg)
-{
- Assert(arg);
- std::string result;
- size_t jsSize = JSStringGetMaximumUTF8CStringSize(arg);
- if (jsSize > 0) {
- ++jsSize;
- DPL::ScopedArray<char> buffer(new char[jsSize]);
- size_t written = JSStringGetUTF8CString(arg, buffer.Get(), jsSize);
- if (written > jsSize) {
- LogError("Conversion could not be fully performed.");
- return std::string();
- }
- result = buffer.Get();
- }
-
- return result;
-}
-
-/**
- * Converts JSValueRef to std::string
- * */
-std::string toString(JSContextRef ctx, JSValueRef value) {
- Assert(ctx && value);
- std::string result;
- JSStringRef str = JSValueToStringCopy(ctx, value, NULL);
- result = toString(str);
- JSStringRelease(str);
- return result;
-}
-
-JSValueRef getProperty(JSContextRef ctx, JSValueRef value, const char* name) {
- Assert(ctx && value && name);
- JSValueRef result = NULL;
- JSObjectRef obj = JSValueToObject(ctx, value, NULL);
- if (obj) {
- JSStringRef str = JSStringCreateWithUTF8CString(name);
- result = JSObjectGetProperty(ctx, obj, str, NULL);
- JSStringRelease(str);
- }
- return result;
-}
-
-JSValueRef getPropertyObj(JSContextRef ctx, JSObjectRef obj, const char* name) {
- Assert(ctx && obj && name);
- JSStringRef str = JSStringCreateWithUTF8CString(name);
- JSValueRef result = JSObjectGetProperty(ctx, obj, str, NULL);
- JSStringRelease(str);
- return result;
-}
-
-//get context JSGlobalContextRef (JSC type) base on view (Abstract type)
-JSGlobalContextRef getJSContext(WebkitInterface::WebkitView view){
- return static_cast<JSGlobalContextRef>(
- WebkitInterfaceSingleton::Instance().getGlobalContext(view));
-}
-
-//get global context JSObjectRef (JSC type) base on view (Abstract type)
-JSObjectRef getJSGlobalObject(WebkitInterface::WebkitView view){
- return JSContextGetGlobalObject(getJSContext(view));
-}
-
-}
-
-typedef JSValueRef (*JSCFunction)(
- JSContextRef context,
- JSObjectRef object,
- JSObjectRef thisObject,
- size_t argumentCount,
- const JSValueRef arguments[],
- JSValueRef* exception);
-
-
-
-class FunctionDispatcher : DPL::Noncopyable
-{
- private:
- struct Data{
- JSObjectPtr originalFunction;
- JSObjectPtr overlayFunction;
- };
-
- typedef std::map<JSObjectRef, Data> OpaquedFunctions;
-
- public:
- static JSValueRef Dispatcher(
- JSContextRef context,
- JSObjectRef object,
- JSObjectRef thisObject,
- size_t argumentCount,
- const JSValueRef arguments[],
- JSValueRef* exception)
- {
- LogDebug("Dispatcher invoked");
-
- JSValueRef result = JSValueMakeUndefined(context);
-
- auto it = m_functions.find(object);
- if (it==m_functions.end())
- {
- LogError("Function Dispatcher can not find proper functions");
- return JSValueMakeBoolean(context, false);
- }
-
- if (it->second.overlayFunction)
- {
- LogDebug("Overlayed function will be invoked...");
- result = JSObjectCallAsFunction(
- context,
- static_cast<JSObjectRef>(
- it->second.overlayFunction->getObject()),
- thisObject,
- argumentCount,
- arguments,
- exception);
- }
-
- //call original FunctionDispatche
- if (it->second.originalFunction)
- {
- LogDebug("Original function will be invoked..");
- result = JSObjectCallAsFunction(
- context,
- static_cast<JSObjectRef>(
- it->second.originalFunction->getObject()),
- thisObject,
- argumentCount,
- arguments,
- exception);
- }
-
- LogDebug("Done");
- return result;
- }
-
- static JSObjectPtr createOverlay(WebkitInterface::WebkitContext ctx,
- const JSObjectPtr& originalFunction,
- const JSObjectPtr& overlayFunction,
- const std::string& name)
- {
- LogDebug("Creation overlay for function: " << name);
- JSStringRef name_js = JSStringCreateWithUTF8CString(name.c_str());
- JSObjectRef fun = JSObjectMakeFunctionWithCallback(
- static_cast<JSContextRef>(ctx),
- name_js,
- static_cast<JSObjectCallAsFunctionCallback>(Dispatcher));
-
- JSStringRelease(name_js);
-
- Data dat = {originalFunction, overlayFunction};
- m_functions[fun] = dat;
- //JSProtect??
- return JSObjectPtr(new JSObject(fun));
- }
-
-// static void setGlobalContext(JSContextRef context)
-// {
-// if (!m_globalContext){
-// m_globalContext = context;
-// }
-// };
-//
-// static bool IsContextSet() {return m_globalContext!=NULL;}
-
- private:
-// static JSContextRef m_globalContext;
- static OpaquedFunctions m_functions;
-};
-
-FunctionDispatcher::OpaquedFunctions
- FunctionDispatcher::m_functions = FunctionDispatcher::OpaquedFunctions();
-
-//JSContextRef FunctionDispatcher::m_globalContext = NULL;
-
-WebkitInterface::WebkitContext WebkitInterface::getGlobalContext(
- WebkitView webkitView)
-{
- void* objectValidator = evas_object_smart_data_get(
- static_cast<const Evas_Object*>(webkitView));
-
- if (!objectValidator) {
- LogError("WebKit error,webkitView object is invalid, temporary bugfix");
- return NULL;
- }
-
- return ewk_view_get_global_context(static_cast<Evas_Object *>(webkitView));
-}
-
-void WebkitInterface::setObjectProperty(WebkitContext context,
- const JSObjectPtr& parentObject,
- const std::string &propertyName,
- const JSObjectPtr& propertyObject)
-{
- LogInfo("Webkit:setting property --" << propertyName << "--");
-
- //create name
- JSStringRef name = JSStringCreateWithUTF8CString(propertyName.c_str());
- //set property
- JSObjectSetProperty(
- static_cast<JSContextRef>(context),
- static_cast<JSObjectRef>(parentObject->getObject()), name,
- static_cast<JSObjectRef>(propertyObject->getObject()),
- kJSPropertyAttributeReadOnly, 0);
-
- JSStringRelease(name);
-}
-
-void WebkitInterface::removeObjectProperty(WebkitContext context,
- const JSObjectPtr& parentObject,
- const std::string &propertyName)
-{
- if (!context) {
- //nothing to do -> no context
- return;
- }
- LogDebug("Deleting property --" << propertyName << "--");
-
- JSStringRef name = JSStringCreateWithUTF8CString(propertyName.c_str());
- JSObjectDeleteProperty(
- static_cast<JSContextRef>(context),
- static_cast<JSObjectRef>(parentObject->getObject()), name, 0);
-
- JSStringRelease(name);
-}
-
-WebkitInterface::PropertiesList WebkitInterface::getObjectPropertiesList(
- WebkitContext context,
- const JSObjectPtr& object) const
-{
- PropertiesList result;
- JSPropertyNameArrayRef properties = JSObjectCopyPropertyNames(
- static_cast<JSContextRef>(context),
- static_cast<JSObjectRef>(object->getObject()));
- std::size_t count = JSPropertyNameArrayGetCount(properties);
- result.reserve(count);
- LogDebug("propesties count " << count);
- for (std::size_t i = 0; i < count; ++i) {
- JSStringRef property = JSPropertyNameArrayGetNameAtIndex(properties, i);
- result.push_back(toString(property));
- }
- JSPropertyNameArrayRelease(properties);
- return result;
-}
-
-void WebkitInterface::setGeolocation(WebkitView webkitView,
- bool state)
-{
- LogDebug("Activating geolocation");
- if (ewk_view_setting_geolocation_set(
- static_cast<Evas_Object *>(webkitView), state) == EINA_FALSE) {
- LogError("Activating geolocation failed");
- }
-}
-
-JSObjectPtr WebkitInterface::createObject(WebkitInterface::WebkitContext context,
- const JSObjectDeclarationPtr& declaration)
-{
- typedef JSObjectDeclaration::Options JO;
-
- if( declaration->getOptions() &&
- declaration->getOptions()->getType() == JO::ClassType::Function)
- {
- LogDebug("Create function");
- JSStringRef jsFunName =
- JSStringCreateWithUTF8CString(declaration->getName().c_str());
-
- JSObjectRef object = JSObjectMakeFunctionWithCallback(
- static_cast<JSContextRef>(context),
- jsFunName,
- reinterpret_cast<JSObjectCallAsFunctionCallback>
- (declaration->getClassTemplate()));
-
- JSStringRelease(jsFunName);
-
- return JSObjectPtr(new JSObject(static_cast<void*>(object)));
- }
- else {
- // LogDebug("Create object");
- return JSObjectPtr(new JSObject(
- JSObjectMake(
- static_cast<JSContextRef>(context),
- static_cast<JSClassRef>(
- const_cast<JSObjectDeclaration::ClassTemplate>(
- declaration->getClassTemplate())),
- NULL)));
- }
-
-}
-
-JSObjectPtr WebkitInterface::createFunctionInstance(WebkitContext context,
- const JSFunctionDeclarationPtr& function)
-{
- JSStringRef jsFunName =
- JSStringCreateWithUTF8CString(function->getName().c_str());
-
- JSObjectRef object = JSObjectMakeFunctionWithCallback(
- static_cast<JSContextRef>(context), jsFunName,
- (JSObjectCallAsFunctionCallback)
-
- reinterpret_cast<JSCFunction>(function->getFunction()));
-
- JSStringRelease(jsFunName);
-
- return JSObjectPtr(new JSObject(static_cast<void*>(object)));
-}
-
-JSObjectPtr WebkitInterface::getGlobalObject(WebkitContext context)
-{
- return JSObjectPtr(new JSObject(static_cast<JSObject::RealObject>(
- JSContextGetGlobalObject(static_cast<JSContextRef>(context)))));
-}
-
-JSObjectPtr WebkitInterface::copyObjectToIframe(
- WebkitInterface::WebkitContext context,
- const JSObjectPtr& iframe,
- const std::string& name)
-{
- LogError("Copy object to iframe: " << name);
-
- JSGlobalContextRef jsGlobalContext =
- static_cast<JSGlobalContextRef>(context);
-
- JSObjectRef globalObject = JSContextGetGlobalObject(jsGlobalContext);
-
- JSValueRef requestedObject = getPropertyObj(jsGlobalContext,
- globalObject,
- name.c_str());
- CHECK_JSVALUE_IS_UNDEFINED_RETURN(jsGlobalContext,
- requestedObject,
- JSObjectPtr());
-
- JSStringRef requestedObjectStr =
- JSStringCreateWithUTF8CString(name.c_str());
-
- JSObjectSetProperty(jsGlobalContext,
- static_cast<JSObjectRef>(iframe->getObject()),
- requestedObjectStr,
- requestedObject,
- kJSPropertyAttributeReadOnly,
- NULL);
-
- JSStringRelease(requestedObjectStr);
-
- return JSObjectPtr(
- new JSObject(const_cast<OpaqueJSValue*>(requestedObject)));
-}
-
-WebkitInterface::ObjectsListPtr
-WebkitInterface::getIframesList(WebkitContext ctx) const
-{
- LogDebug("get iframes list");
- JSGlobalContextRef context = static_cast<JSGlobalContextRef>(ctx);
-
- JSObjectRef globalObject = JSContextGetGlobalObject(context);
-
- JSValueRef frames = getPropertyObj(context, globalObject, "frames");
- CHECK_JSVALUE_IS_UNDEFINED_RETURN(context, frames, ObjectsListPtr());
-
- JSObjectRef frames_o = JSValueToObject(context, frames, NULL);
- CHECK_JSOBJECT_IS_NULL_RETURN(frames_o, ObjectsListPtr());
-
- JSValueRef len = getPropertyObj(context, frames_o, "length");
- CHECK_JSVALUE_IS_UNDEFINED_RETURN(context, len, ObjectsListPtr());
-
- size_t count = JSValueToNumber(context, len, NULL);
- LogDebug("frames_o.length = " << count);
-
- ObjectsListPtr retList = ObjectsListPtr(new ObjectsList());
-
- for (size_t i = 0; i < count; ++i) {
- std::stringstream ss;
- ss << i;
- JSValueRef frame = getPropertyObj(context,
- frames_o,
- ss.str().c_str());
- if (JSValueIsUndefined(context, frame)) {
- LogError("Selected frame is null: frame[" << i << "]");
- continue;
- }
- JSObjectRef frame_obj = JSValueToObject(context, frame, NULL);
- if (!frame_obj) {
- LogError("frame_obj is NULL.");
- continue;
- }
- retList->push_back(JSObjectPtr(new JSObject(frame_obj)));
- LogDebug("Frame Value Pointer: " << frame);
- LogDebug("Frame Object Pointer: " << frame_obj);
- }
-
- return retList;
-}
-
-
-JSObjectPtr WebkitInterface::createOverlayedFunction(WebkitContext ctx,
- const JSObjectPtr& originalFunction,
- const JSObjectPtr& overlayFunction,
- const std::string& name) const
-{
-// if(!FunctionDispatcher::IsContextSet())
-// {
-// FunctionDispatcher::setGlobalContext(static_cast<JSContextRef>(ctx));
-// }
-//
- return FunctionDispatcher::createOverlay(ctx,
- originalFunction,
- overlayFunction,
- name);
-}
-
-JSObjectPtr WebkitInterface::getJSObjectProperty(WebkitContext ctx,
- const JSObjectPtr& frame,
- const std::string& name) const
-{
- JSContextRef context = static_cast<JSContextRef>(ctx);
- JSObjectRef frame_js = static_cast<JSObjectRef>(frame->getObject());
-
- JSValueRef property = getPropertyObj(context, frame_js, name.c_str());
-
- JSObjectRef objProp = JSValueToObject(context, property, NULL);
-
- return JSObjectPtr(new JSObject(objProp));
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file explorer.cpp
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#include <algorithm>
-#include <dpl/foreach.h>
-#include <dpl/log/log.h>
-#include "explorer.h"
-
-namespace {
-const char* SEPARATOR = ".";
-const std::string GLOBAL_OBJECT_NAME = "GLOBAL_OBJECT";
-}
-
-using namespace std;
-
-Explorer::Explorer(WebkitInterface::WebkitContext context) :
- m_context(context)
-{
- if (!context) {
- LogError("Context is NULL");
- return;
- }
-
- //insert global object into the map
- Try {
- insertObject(GLOBAL_OBJECT_NAME,
- WebkitInterfaceSingleton::Instance().getGlobalObject(
- context));
- LogDebug("Register main frame");
- //register main frame;
- m_iframeSupport.registerIframe(
- WebkitInterfaceSingleton::Instance().getGlobalObject(context));
- }
- Catch(Explorer::Exception::ObjectExist)
- {
- LogError("Error, Global object already add");
- }
-}
-
-Explorer::ObjectsPairPtr Explorer::addObject(const std::string& name,
- const std::string& parentName,
- const JSObjectPtr& object)
-{
- LogDebug("Explorer:add " << parentName << "<-" << name);
-
- if (name.empty()) {
- ThrowMsg(Exception::WrongName, "Object name is empty");
- }
-
- //find parent object
- JSObjectPtr parent;
- Try {
- parent = getObject(parentName);
- }
- Catch(Explorer::Exception::NotFound)
- {
- ThrowMsg(Explorer::Exception::MissingParent,
- "Parent object doesnt exist");
- }
-
- insertObject(normalizeName(name, parentName), object);
-
- return ObjectsPairPtr(new ObjectsPair(parent, object));
-}
-
-void Explorer::insertObject(const std::string& name,
- const JSObjectPtr& object)
-{
- //check if object exists
- StorageIt it = m_storage.find(name);
- if (it != m_storage.end()) {
- ThrowMsg(Exception::ObjectExist, "Object exists");
- }
- LogInfo("Insertion object: " << name);
- m_storage[name] = object;
-}
-
-JSObjectPtr Explorer::getObject(const std::string& name) const
-{
- StorageConstIt it = m_storage.find(normalizeName(name).c_str());
-
- if (it == m_storage.end()) {
- LogError("ObjectNotFound: " << normalizeName(name));
- ThrowMsg(Exception::NotFound, "Object not found");
- }
- return it->second;
-}
-
-std::string Explorer::normalizeName(const std::string& objectName) const
-{
- if (!objectName.compare(0, GLOBAL_OBJECT_NAME.size(),
- GLOBAL_OBJECT_NAME)) {
- return objectName;
- }
-
- //each object in storage has name started from $GLOBAL_OBJECT_NAME$
- return GLOBAL_OBJECT_NAME + string(SEPARATOR) + objectName;
-}
-
-std::string Explorer::normalizeName(const string& objectName,
- const string& parentName) const
-{
- string normalizedName;
- normalizedName =
- normalizeName(parentName) + string(SEPARATOR) + objectName;
- return normalizedName;
-}
-
-bool Explorer::deregisterObject(const JSObjectDeclarationPtr& declaration)
-{
- JSObjectPtr parent = getObject(declaration->getParentName());
-
- WebkitInterfaceSingleton::Instance().removeObjectProperty(
- m_context,
- parent,
- declaration->getName());
- return true;
-}
-
-bool Explorer::registerObject(const JSObjectDeclarationPtr& declaration)
-{
- LogInfo("Registration object: " << declaration->getParentName() <<
- "<-" << declaration->getName());
-
- Try
- {
- JSObjectPtr parent = getObject(declaration->getParentName());
- JSObjectPtr newObject;
-
- if (declaration->checkIframesSupported()) {
- LogDebug("Iframe supported");
- newObject = m_iframeSupport.addObjectToIframe(m_context,
- parent,
- declaration);
- m_iframeSupport.registerDeclaration(declaration);
- m_iframeSupport.invokeCallbackForMainFrame(m_context,
- declaration,
- newObject);
- }
- else {
- LogDebug("Iframe NOT supported");
- newObject = WebkitInterfaceSingleton::Instance().
- createObject(m_context,declaration);
-
- WebkitInterfaceSingleton::Instance().setObjectProperty(
- m_context,
- parent,
- declaration->getName(),
- newObject);
- }
-
- //add to webruntime storage
- addObject(declaration->getName(),
- declaration->getParentName(),
- newObject);
-
- return true;
- }
- Catch(Exception::ObjectExist)
- {
- LogError("Registration failed, object: " <<
- declaration->getName() << "EXISTS");
- }
- Catch(Exception::MissingParent)
- {
- LogError("Registration failed, Parent: " <<
- declaration->getParentName() << " NOT FOUND");
- }
- Catch(Exception::WrongName)
- {
- LogError("Registration failed, object: " <<
- declaration->getName() << "wrong name");
- }
-
- return false;
-}
-
-bool Explorer::registerFunction(const JSFunctionDeclarationPtr& declaration)
-{
- LogDebug("Registration function: " <<
- declaration->getParentName() << "<-" << declaration->getName());
-
- Try {
- if (declaration->getName().empty()) {
- Throw(Exception::WrongName);
- }
-
- if (!declaration->getFunction()) {
- Throw(Exception::NullObject);
- }
-
- JSObjectPtr parent = getObject(declaration->getParentName());
- //add to webruntime storage
- //NONE - storage contain ONLY OBJECTS - not a functions
-
- //set property in webkit
- WebkitInterfaceSingleton::Instance().setObjectProperty(
- m_context,
- parent,
- declaration->getName(),
- WebkitInterfaceSingleton::Instance().createFunctionInstance(
- m_context, declaration));
-
- return true;
- }
- Catch(Exception::NotFound){
- LogError("Registration failed, Parent: " <<
- declaration->getParentName() << " NOT FOUND");
- }
- Catch(Exception::WrongName){
- LogError("Registration failed, object: " <<
- declaration->getName() << "wrong name");
- }
- Catch(Exception::NullObject){
- LogError("Registration failed, function: " <<
- declaration->getName() << "is NULL");
- }
-
- return false;
-}
-
-void Explorer::printDebug() const
-{
- FOREACH(it, m_storage)
- {
- LogDebug(it->first);
- }
-}
-
-void Explorer::loadPluginsIntoIframes()
-{
- auto iframes =
- WebkitInterfaceSingleton::Instance().getIframesList(m_context);
- if(!iframes){
- LogError("Iframes list is null");
- return;
- }
-
- JSObjectPtr newIframe = m_iframeSupport.findNewIframe(iframes);
- if(!newIframe) {
- LogError("New iframe has not been found");
- return;
- }
-
- m_iframeSupport.registerIframe(newIframe);
- m_iframeSupport.addObjectToIframe(m_context,newIframe);
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file explorer.h
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_EXPLORER_H_
-#define WRT_SRC_PLUGIN_SERVICE_EXPLORER_H_
-
-#include <hash_map>
-#include <hash_fun.h>
-
-#include <dpl/noncopyable.h>
-#include <dpl/exception.h>
-#include <dpl/shared_ptr.h>
-
-#include "js_object.h"
-#include "js_object_declaration.h"
-#include "js_function_declaration.h"
-#include "webkit_interface.h"
-#include "plugin_iframe_support.h"
-
-class Explorer : private DPL::Noncopyable
-{
- public:
- /**
- * Explorer Exception classes
- */
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, ObjectExist)
- DECLARE_EXCEPTION_TYPE(Base, MissingParent)
- DECLARE_EXCEPTION_TYPE(Base, WrongName)
- DECLARE_EXCEPTION_TYPE(Base, NotFound)
- DECLARE_EXCEPTION_TYPE(Base, NullObject)
- };
-
- public:
- explicit Explorer(WebkitInterface::WebkitContext context);
-
- /**
- * register object
- * @return true if success
- * */
- bool registerObject(const JSObjectDeclarationPtr& declaration);
-
- bool deregisterObject(const JSObjectDeclarationPtr& declaration);
-
- void loadPluginsIntoIframes();
-
- /**
- *register function
- * */
- bool registerFunction(const JSFunctionDeclarationPtr& function);
-
- void printDebug() const;
-
- private:
-
- struct ObjectsPair
- {
- ObjectsPair(const JSObjectPtr& parent,
- const JSObjectPtr& child) :
- m_parent(parent),
- m_child(child)
- {
- }
-
- JSObjectPtr m_parent;
- JSObjectPtr m_child;
- };
- typedef DPL::SharedPtr<ObjectsPair> ObjectsPairPtr;
-
- struct Hasher
- {
- size_t operator()(const std::string& __s) const
- {
- return __gnu_cxx::__stl_hash_string(__s.c_str());
- }
- };
-
- //map of pairs {fullObjectName,JSObject}
- //in fact the key is not the string but the hashed value
- //for example {Window.Widget.Multimedia,JSObject}
- typedef __gnu_cxx::hash_map<const std::string, JSObjectPtr, Hasher> Storage;
- typedef Storage::iterator StorageIt;
- typedef Storage::const_iterator StorageConstIt;
-
- Storage m_storage;
-
- IframesSupport m_iframeSupport;
-
- WebkitInterface::WebkitContext m_context;
-
- private:
- /**
- * add object to the storage
- * @return ObjectsPair if success
- * @throw ObjectExists if object is already registered
- * @throw MissingParent if parent object doesnt exist
- * @throw WrongName if name is empty
- * */
- virtual ObjectsPairPtr addObject(const std::string& name,
- const std::string& parentName,
- const JSObjectPtr& object);
-
- /**
- * return JSObject for given name
- * the name have to be normalized if needed
- * @throw NotFound if object doesnt exist
- * */
- virtual JSObjectPtr getObject(const std::string& name) const;
-
- /*
- * insert object to the storage with proper name
- * @throw ObjectExists if object is already registered
- */
- void insertObject(const std::string& name,
- const JSObjectPtr& object);
-
- /**
- * check if name has format compatible with names stored by explorer
- * */
- std::string normalizeName(const std::string& name) const;
-
- /**
- * create name of object in explorer format
- * */
- std::string normalizeName(const std::string& objectName,
- const std::string& parentName) const;
-};
-
-typedef DPL::SharedPtr<Explorer> ExplorerPtr;
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file js_function_declaration.cpp
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#include <dpl/log/log.h>
-#include <js_function_declaration.h>
-
-JSFunctionDeclaration::JSFunctionDeclaration(const std::string& name,
- const std::string& parentName,
- JSFunction functionPtr) :
- m_name(name),
- m_parentName(parentName),
- m_functionPtr(functionPtr)
-{
- if (!functionPtr) {
- LogError("Function object: " << name << " is NULL");
- }
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file js_function_declaration.h
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_JS_FUNCTION_DECLARATION_H_
-#define WRT_SRC_PLUGIN_SERVICE_JS_FUNCTION_DECLARATION_H_
-
-#include <dpl/shared_ptr.h>
-#include <dpl/noncopyable.h>
-#include <string>
-
-class JSFunctionDeclaration : private DPL::Noncopyable
-{
- public:
- typedef void* (*JSFunction)(void*);
-
- public:
- JSFunctionDeclaration(const std::string& name,
- const std::string& parentName,
- JSFunction functionPtr);
-
- virtual const std::string& getName() const
- {
- return m_name;
- }
-
- virtual const std::string& getParentName() const
- {
- return m_parentName;
- }
-
- virtual JSFunction getFunction() const
- {
- return m_functionPtr;
- }
-
- virtual ~JSFunctionDeclaration()
- {
- }
-
- private:
- std::string m_name;
- std::string m_parentName;
- JSFunction m_functionPtr;
-};
-
-typedef DPL::SharedPtr<JSFunctionDeclaration> JSFunctionDeclarationPtr;
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file js_function_manager.h
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_JS_FUNCTION_MANGER_H_
-#define WRT_SRC_PLUGIN_SERVICE_JS_FUNCTION_MANGER_H_
-
-#include <list>
-#include <dpl/noncopyable.h>
-#include <dpl/singleton.h>
-
-#include "js_function_declaration.h"
-
-class JsFunctionManager : private DPL::Noncopyable
-{
- public:
- typedef std::list<JSFunctionDeclarationPtr> Functions;
- typedef Functions::iterator FunctionsIt;
-
- typedef DPL::SharedPtr<Functions> FunctionsPtr;
-
- public:
- FunctionsPtr GetFunctions();
-
- private:
- JsFunctionManager()
- {
- }
- bool initialize();
-
- private:
- static FunctionsPtr m_functions;
-
- friend class DPL::Singleton<JsFunctionManager>;
-};
-
-typedef DPL::Singleton<JsFunctionManager> JsFunctionManagerSingleton;
-
-#endif
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file js_object.cpp
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#include "js_object.h"
-#include <dpl/log/log.h>
-
-JSObject::JSObject(RealObject object) : m_object(object)
-{
- if (!object) {
- LogError("Object is NULL");
- }
-}
-
-JSObject::RealObject JSObject::getObject() const
-{
- return m_object;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file js_object.h
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_JS_OBJECT_H_
-#define WRT_SRC_PLUGIN_SERVICE_JS_OBJECT_H_
-
-#include <dpl/noncopyable.h>
-#include <dpl/shared_ptr.h>
-
-class JSObject : private DPL::Noncopyable
-{
- public:
- typedef void* RealObject;
-
- public:
- explicit JSObject(RealObject object);
-
- /**
- * returns javascript engine object
- * @throw NullPtrException
- * */
- virtual RealObject getObject() const;
-
- virtual ~JSObject()
- {
- }
-
- private:
- RealObject m_object;
-};
-
-typedef DPL::SharedPtr<JSObject> JSObjectPtr;
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file js_object_declaration.cpp
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#include <dpl/log/log.h>
-#include <dpl/assert.h>
-#include "js_object_declaration.h"
-
-JSObjectDeclaration::JSObjectDeclaration(class_definition_ptr_t classD) :
- m_name(classD->object_name),
- m_parentName(classD->parent_name),
- m_classTemplate(classD->js_class_template)
-{
- if(classD->class_options){
- LogDebug("class options is not a null");
- m_options = OptionsPtr(new Options(classD->class_options));
- }
-}
-
-JSObjectDeclaration::~JSObjectDeclaration()
-{
- LogDebug("Destroying object: " << m_name);
-}
-
-bool JSObjectDeclaration::checkIframesSupported() const{
- LogDebug("Check iframe supported");
- if(!m_options ||
- m_options->getIframeObject() == Options::IFrameObject::None)
- {
- LogDebug("Iframe NOT supported for object: " << getName());
- return false;
- }
-
- LogDebug("Iframe supported for object: " << getName());
-
- return true;
-}
-
-JSObjectDeclaration::Options::ClassType
- JSObjectDeclaration::Options::getType() const
-{
- LogDebug("Get type field from declaration's option");
- Assert(m_options && "Pointer to options is NULL");
-
- switch(m_options->type){
- case JS_CLASS: return ClassType::Class;
- case JS_FUNCTION: return ClassType::Function;
- default: Assert(0 && "Wrong value of type");
- }
-}
-
-JSObjectDeclaration::Options::IFrameObject
- JSObjectDeclaration::Options::getIframeObject() const
-{
- LogDebug("Get Frame Option");
- Assert(m_options && "Options object is NULL");
-
- switch(m_options->iframe_option){
- case NONE: return IFrameObject::None;
- case REFERENCE: return IFrameObject::Reference;
- case CREATE_INSTANCE: return IFrameObject::CreateInstance;
- default:
- Assert(0 && "Wrong value of behaviour type");
- }
-}
-
-JSObjectDeclaration::Options::IFrameNotice
- JSObjectDeclaration::Options::getIframeNotice() const
-{
- LogDebug("Get Frame Option");
- Assert(m_options && "Pointer to options is null");
-
- switch(m_options->iframe_notice){
- case NONE_NOTICE: return IFrameNotice::None;
- case ALWAYS_NOTICE: return IFrameNotice::AlwaysNotice;
- default:
- Assert(0 && "Wrong value of notice option");
- }
-}
-
-JSObjectDeclaration::Options::IFrameOverlay
- JSObjectDeclaration::Options::getIframeOverlay() const
-{
- LogDebug("Get Frame Option");
- Assert(m_options && "Pointer to options is null");
-
- switch(m_options->iframe_overlay){
- case USE_ORGINAL: return IFrameOverlay::UseOriginal;
- case USE_OVERLAYED: return IFrameOverlay::UseOverlayed;
- case OVERLAYED_BEFORE_ORIGINAL:
- return IFrameOverlay::OverlayedBeforeOriginal;
- default:
- Assert(0 && "Wrong value of overlay option");
- }
-}
-
-void JSObjectDeclaration::Options::invokeCallback(JsContext ctx,
- ObjectInstance iframe,
- ObjectInstance object) const
-{
- LogDebug("JS Object create, notice.");
- Assert(m_options && m_options->cb && "Empty callback pointer");
- m_options->cb(ctx, iframe, object);
-}
-
-JSObjectDeclaration::Options::PrivateData
- JSObjectDeclaration::Options::getPrivateData() const
-{
- Assert(m_options && m_options->private_data && "empty private data");
- return m_options->private_data;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file js_object_declaration.h
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_JS_OBJECT_DECLARATION_H_
-#define WRT_SRC_PLUGIN_SERVICE_JS_OBJECT_DECLARATION_H_
-
-#include <string>
-#include <memory>
-#include <cassert>
-#include <dpl/shared_ptr.h>
-#include <dpl/noncopyable.h>
-#include <dpl/log/log.h>
-#include <wrt_plugin_export.h>
-
-class JSObjectDeclaration : private DPL::Noncopyable
-{
- public:
- typedef const void* ConstClassTemplate;
- typedef void* ClassTemplate;
- typedef class_definition_options_t ClassOptions;
-
-
- class Options : DPL::Noncopyable {
- public:
- enum class ClassType{
- Class,
- Function
- };
-
- enum class IFrameObject{
- None,
- Reference,
- CreateInstance
- };
-
- enum class IFrameNotice{
- None,
- AlwaysNotice
- };
-
- //only for function
- enum class IFrameOverlay{
- UseOriginal,
- UseOverlayed,
- OverlayedBeforeOriginal
- };
-
- typedef js_object_instance_t ObjectInstance;
- typedef java_script_context_t JsContext;
- typedef void* PrivateData;
-
- public:
- ClassType getType() const;
-
- IFrameObject getIframeObject() const;
- IFrameNotice getIframeNotice() const;
- IFrameOverlay getIframeOverlay() const;
-
- void invokeCallback(JsContext ctx,
- ObjectInstance iframe,
- ObjectInstance object) const;
-
- PrivateData getPrivateData() const;
-
- private:
- const ClassOptions* m_options;
-
- private:
- explicit Options(const ClassOptions* options) : m_options(options)
- {
- assert(options && "Dont create empty options");
- }
-
- friend class JSObjectDeclaration;
-
- };
-
- typedef std::shared_ptr<Options> OptionsPtr;
-
- public:
-
- explicit JSObjectDeclaration(class_definition_ptr_t declaration);
-
- virtual const std::string& getName() const
- {
- return m_name;
- }
-
- virtual const std::string& getParentName() const
- {
- return m_parentName;
- }
-
- virtual ConstClassTemplate getClassTemplate() const
- {
- return m_classTemplate;
- }
-
- const OptionsPtr getOptions() const{
- return m_options;
- }
-
- bool checkIframesSupported() const;
-
- virtual ~JSObjectDeclaration();
-
- private:
- std::string m_name;
- std::string m_parentName;
- ConstClassTemplate m_classTemplate;
- OptionsPtr m_options;
-};
-
-typedef DPL::SharedPtr<JSObjectDeclaration> JSObjectDeclarationPtr;
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of plugin
- */
-#include "plugin.h"
-#include <dpl/log/log.h>
-#include <dpl/assert.h>
-#include <dlfcn.h>
-
-Plugin::Plugin(const std::string &fileName,
- void *libHandle,
- on_widget_start_proc apiOnWidgetStart,
- on_widget_stop_proc apiOnWidgetStop,
- const ClassPtrList &apiClassList) :
- m_fileName(fileName),
- m_libHandle(libHandle),
- m_apiOnWidgetStart(apiOnWidgetStart),
- m_apiOnWidgetStop(apiOnWidgetStop),
- m_apiClassList(apiClassList)
-{
-}
-
-Plugin::~Plugin()
-{
- LogInfo("Unloading plugin library: " << m_fileName << "...");
-
- // Unload library
- if (dlclose(m_libHandle) != 0) {
- LogError("Cannot close plugin handle");
- } else {
- LogDebug("Library is unloaded");
- }
-}
-
-PluginPtr Plugin::LoadFromFile(const std::string& fileName)
-{
- ADD_PROFILING_POINT("plugin_load_from_file", "start");
- LogDebug("LoadFromFile" << fileName);
-
- LogDebug("Loading plugin: " << fileName);
-
- void *dllHandle;
- ADD_PROFILING_POINT("plugin_dlopen", "start");
- dllHandle = dlopen(fileName.c_str(), RTLD_NOW);
- ADD_PROFILING_POINT("plugin_dlopen", "stop");
-
- if (dllHandle == NULL) {
- LogError(
- "Failed to load plugin: " << fileName << ". Reason: " << dlerror());
- PluginPtr empty;
- return empty;
- }
-
- // Load new plugin API
- on_widget_start_proc *onWidgetStartProcPtr = NULL;
- on_widget_stop_proc *onWidgetStopProcPtr = NULL;
- const class_definition_t *rawClassList = NULL;
- get_widget_class_map_proc *getWidgetClassMapProcPtr = NULL;
-
- ADD_PROFILING_POINT("plugin_find_symbol", "start");
- onWidgetStartProcPtr =
- reinterpret_cast<on_widget_start_proc *>(dlsym(dllHandle,
- PLUGIN_WIDGET_START_PROC_NAME));
- onWidgetStopProcPtr =
- reinterpret_cast<on_widget_stop_proc *>(dlsym(dllHandle,
- PLUGIN_WIDGET_STOP_PROC_NAME));
- getWidgetClassMapProcPtr =
- reinterpret_cast<get_widget_class_map_proc *>(dlsym(dllHandle,
- PLUGIN_GET_CLASS_MAP_PROC_NAME));
-
- if( getWidgetClassMapProcPtr )
- {
- rawClassList = (*getWidgetClassMapProcPtr)();
- LogDebug("rawClassList : " << rawClassList << "by getWidgetClassMapProcPtr()");
- }
- else
- {
- rawClassList =
- static_cast<const class_definition_t *>(dlsym(dllHandle,
- PLUGIN_CLASS_MAP_NAME));
- LogDebug("rawClassList : " << rawClassList );
- }
-
- ADD_PROFILING_POINT("plugin_find_symbol", "stop");
-
- if (onWidgetStartProcPtr == NULL || onWidgetStopProcPtr == NULL ||
- rawClassList == NULL) {
- LogWarning("#####");
- LogWarning(
- "##### Warning: The following plugin does not support new plugin API.");
- LogWarning(
- "##### Old plugin API is deprecated. Please update it to new API");
- LogWarning("#####");
- LogWarning(
- "##### Plugin: " << fileName <<
- " has got deprecated or invalid API");
- LogWarning("#####");
-
- // Will not load plugin
- dlclose(dllHandle);
-
- PluginPtr empty;
- return empty;
- }
-
- LogInfo("#####");
- LogInfo("##### Plugin: " << fileName << " supports new plugin API");
- LogInfo("#####");
- LogInfo("##### $onWidgetStartProc: " << *onWidgetStartProcPtr);
- LogInfo("##### $onWidgetStopProc " << *onWidgetStopProcPtr);
- LogInfo("##### $classMap: " << reinterpret_cast<const void *>(rawClassList));
- LogInfo("##### ");
- LogInfo("##### Class map:");
-
- const class_definition_t *rawClassListIterator = rawClassList;
- ClassPtrList classList(new Plugin::ClassList());
-
- ADD_PROFILING_POINT("plugin_class_parse", "start");
- // Parse all class definitions
- while (rawClassListIterator->parent_name != NULL &&
- rawClassListIterator->object_name != NULL &&
- rawClassListIterator->js_class_template != NULL) {
- // Logging
- LogInfo("#####");
- LogInfo("##### [" << rawClassListIterator->object_name << "]: ");
- LogInfo("##### Parent: " << rawClassListIterator->parent_name);
-
- // Register class
- classList->push_back(ClassPtr(new Class(rawClassListIterator)));
-
- // Go to next class
- ++rawClassListIterator;
- }
- ADD_PROFILING_POINT("plugin_class_parse", "stop");
-
- LogInfo("#####");
-
- // Load export table
- LogDebug("Plugin successfuly loaded");
-
- // Insert to loaded modules list
-
- ADD_PROFILING_POINT("plugin_model_creation", "start");
- PluginPtr instance(new Plugin(fileName,
- dllHandle,
- *onWidgetStartProcPtr,
- *onWidgetStopProcPtr,
- classList));
- ADD_PROFILING_POINT("plugin_model_creation", "stop");
-
- ADD_PROFILING_POINT("plugin_load_from_file", "stop");
- return instance;
-}
-
-std::string Plugin::GetFileName() const
-{
- return m_fileName;
-}
-
-void Plugin::OnWidgetStart(int widgetId,
- java_script_context_t context,
- const engine_interface_t *interface)
-{
- m_apiOnWidgetStart(widgetId, context, interface);
-}
-
-void Plugin::OnWidgetStop(int widgetId)
-{
- m_apiOnWidgetStop(widgetId);
-}
-
-const Plugin::ClassPtrList Plugin::GetClassList() const
-{
- return m_apiClassList;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of plugin
- */
-#ifndef WRT_SRC_PLUGIN_SERVICE_PLUGIN_H_
-#define WRT_SRC_PLUGIN_SERVICE_PLUGIN_H_
-
-#include <list>
-#include <map>
-#include <string>
-#include <dpl/atomic.h>
-#include <dpl/shared_ptr.h>
-#include <dpl/noncopyable.h>
-#include <wrt_plugin_export.h>
-#include <js_object_declaration.h>
-
-class Plugin;
-typedef DPL::SharedPtr<Plugin> PluginPtr;
-
-class Plugin : private DPL::Noncopyable
-{
- public:
- typedef JSObjectDeclaration Class;
- typedef JSObjectDeclarationPtr ClassPtr;
- typedef std::list<ClassPtr> ClassList;
- typedef DPL::SharedPtr<ClassList> ClassPtrList;
-
- private:
- ///< Plug-in identifier. Currently plug-in file name is used as the ID
- std::string m_fileName;
-
- ///< Handle for the plug-in library. A plug-in is a dynamic loadable library
- void* m_libHandle;
-
- // Plugin API
- on_widget_start_proc m_apiOnWidgetStart;
- on_widget_stop_proc m_apiOnWidgetStop;
- const ClassPtrList m_apiClassList;
-
- Plugin(const std::string &fileName,
- void *libHandle,
- on_widget_start_proc apiOnWidgetStart,
- on_widget_stop_proc apiOnWidgetStop,
- const ClassPtrList &apiClassList);
-
- public:
- virtual ~Plugin();
-
- // Loading
- static PluginPtr LoadFromFile(const std::string &fileName);
-
- // Filename
- std::string GetFileName() const;
-
- // API
- void OnWidgetStart(int widgetId,
- java_script_context_t context,
- const engine_interface_t *interface);
- void OnWidgetStop(int widgetId);
- const ClassPtrList GetClassList() const;
-};
-
-#endif // PLUGIN_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_iframe_support.cpp
- * @version 1.0
- * @brief
- */
-
-#include "plugin_iframe_support.h"
-
-#include <dpl/foreach.h>
-
-void IframesSupport::registerDeclaration(
- const JSObjectDeclarationPtr& declaration)
-{
- LogDebug("Registration iframes-supported plugins " <<
- declaration->getName());
-
- if(declaration->getParentName().find('.') != std::string::npos)
- {
- LogWarning("The object will not be loaded to iframes");
- return;
- }
- m_iframesObjects.push_back(declaration);
-}
-
-void IframesSupport::registerIframe(const JSObjectPtr& iframe){
- LogDebug("LoadedIframes size: " << m_loadedIframes.size() );
- m_loadedIframes.insert(iframe);
-}
-
-void IframesSupport::invokeCallbackForMainFrame(
- WebkitInterface::WebkitContext ctx,
- const JSObjectDeclarationPtr& declaration,
- const JSObjectPtr& objectInstance)
-{
- LogDebug("Invoke callback for main frame");
- JSObjectPtr globalObject =
- WebkitInterfaceSingleton::Instance().getGlobalObject(ctx);
-
- if(!declaration->getOptions())
- {
- LogError("Registration started but option field is null");
- return;
- }
-
- auto iframeNotice = declaration->getOptions()->getIframeNotice();
-
- typedef JSObjectDeclaration::Options JO;
-
- if(iframeNotice == JO::IFrameNotice::AlwaysNotice)
- {
- LogDebug("Notice plugin");
- declaration->getOptions()->invokeCallback(
- ctx, globalObject->getObject(), objectInstance->getObject());
- }
-}
-
-JSObjectPtr IframesSupport::findNewIframe(
- const WebkitInterface::ObjectsListPtr& allIframes)
-{
- LogDebug("Find new iframe");
- //first, check if the iframe is not on the tail of the list
- auto it = allIframes->rbegin();
- if(it==allIframes->rend()){
- return JSObjectPtr();
- }
-
- //It is assumed that only one new iframe is loaded
- auto it_loaded = m_loadedIframes.find(*it);
- //object not found, so thats the new iframe
- if(it_loaded == m_loadedIframes.end()){
- LogDebug("New iframe found");
- return *it;
- }
-
- LogDebug("searching new iframe deeper");
- FOREACH(it_l, *allIframes)
- {
- if(m_loadedIframes.find(*it_l) != m_loadedIframes.end())
- {
- continue;
- }
- return *it_l;
- }
-
- return JSObjectPtr();
-}
-
-void IframesSupport::addObjectToIframe(WebkitInterface::WebkitContext ctx,
- const JSObjectPtr& iframe)
-{
- LogDebug("Add objects to iframe: " << iframe->getObject());
- FOREACH(decl, m_iframesObjects)
- {
- addObjectToIframe(ctx, iframe, *decl);
- }
-}
-
-JSObjectPtr IframesSupport::addObjectToIframe(WebkitInterface::WebkitContext ctx,
- const JSObjectPtr& iframe,
- const JSObjectDeclarationPtr& object)
-{
- LogDebug("Add object " << object->getName() <<
- " to iframe " << iframe->getObject());
-
- auto iframeObject = object->getOptions()->getIframeObject();
- typedef JSObjectDeclaration::Options JO;
-
- JSObjectPtr objectInstance;
-
- if (iframeObject == JO::IFrameObject::Reference)
- {
- LogDebug("Object: " << object->getName()
- << " will be Referenced to iframe");
- objectInstance = WebkitInterfaceSingleton::Instance().
- copyObjectToIframe(ctx, iframe, object->getName());
- }
- else if(iframeObject == JO::IFrameObject::CreateInstance)
- {
- LogDebug("Object: " << object->getName()
- << " will be created to iframe");
-
-
- if (object->getOptions()->getType() == JO::ClassType::Function)
- {
- JSObjectPtr overlay =
- WebkitInterfaceSingleton::Instance().
- createObject(ctx, object);
-
- JSObjectPtr original =
- WebkitInterfaceSingleton::Instance().
- getJSObjectProperty(ctx,iframe, object->getName());
-
- objectInstance =
- WebkitInterfaceSingleton::Instance().
- createOverlayedFunction(ctx,
- original,
- overlay,
- object->getName()
- );
-
- }
- else
- {
- objectInstance = WebkitInterfaceSingleton::Instance().
- createObject(ctx, object);
- }
-
- WebkitInterfaceSingleton::Instance().setObjectProperty(
- ctx,
- iframe,
- object->getName(),
- objectInstance);
- }
-
- //notice
- auto iframeNotice = object->getOptions()->getIframeNotice();
- if (iframeNotice == JO::IFrameNotice::AlwaysNotice)
- {
- object->getOptions()->invokeCallback(ctx,
- iframe->getObject(),
- objectInstance->getObject());
- }
-
- return objectInstance;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_iframe_support.h
- * @version 1.0
- * @brief
- */
-
-#ifndef _WRTENGINE_SRC_PLUGINSERVICE_IFRAME_SUPPORT_H_
-#define _WRTENGINE_SRC_PLUGINSERVICE_IFRAME_SUPPORT_H_
-
-#include<list>
-#include<set>
-#include "js_object_declaration.h"
-#include "js_object.h"
-#include "webkit_interface.h"
-
-class IframesSupport
-{
- public:
- void registerDeclaration(const JSObjectDeclarationPtr& declaration);
-
- void registerIframe(const JSObjectPtr& iframe);
-
- void invokeCallbackForMainFrame(WebkitInterface::WebkitContext ctx,
- const JSObjectDeclarationPtr& declaration,
- const JSObjectPtr& objectInstance);
-
- JSObjectPtr findNewIframe(
- const WebkitInterface::ObjectsListPtr& allIframes);
-
- void addObjectToIframe(WebkitInterface::WebkitContext ctx,
- const JSObjectPtr& iframe);
-
- JSObjectPtr addObjectToIframe(WebkitInterface::WebkitContext ctx,
- const JSObjectPtr& iframe,
- const JSObjectDeclarationPtr& object);
-
- private:
- std::list<JSObjectDeclarationPtr> m_iframesObjects;
- std::set<JSObjectPtr> m_loadedIframes;
-};
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_logic.cpp
- * @author Piotr Fatyga (p.fatyga@samsung.com)
- * @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of plugin and
- * feature loading routines
- * @brief This code is intended to work behind view controller
- */
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <dirent.h>
-#include <errno.h>
-#include <fstream>
-#include <map>
-#include <vector>
-#include <algorithm>
-#include <cstring>
-#include <dpl/assert.h>
-#include <dpl/scoped_array.h>
-#include <dpl/log/log.h>
-#include <dpl/foreach.h>
-#include <dpl/singleton_impl.h>
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-#include <dpl/wrt-dao-ro/feature_dao_read_only.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <plugin_api.h>
-#include <js_function_manager.h>
-#include <wrt_plugin_export.h>
-#include <plugin_logic.h>
-#include <webkit_interface.h>
-#include <JavaScriptCore/JavaScript.h>
-
-using namespace std;
-using namespace WrtDB;
-
-namespace {
-const char *STANDARD_FEATURES_LIST_FILE = "standard-features-list";
-const char *LIBRARY_PATH_SEPARATOR = "/";
-const char *SCALE_PROPERTY_NAME = "scale";
-}
-
-
-IMPLEMENT_SINGLETON(PluginLogic);
-
-PluginLogic::PluginLogic() :
- m_sessionStarted(false)
-{
- LogDebug("Initializing Plugin Logic...");
-
- // Retrieve plugin model list
- readPlugins();
-
- // Retrieve features model list
- readFeatures();
-
- // Reading standard features list from file
- readStandardFeaturesList();
-}
-
-PluginLogic::~PluginLogic()
-{
- Assert(!m_sessionStarted && "Must stop widget session before exit!");
-
- LogDebug("Deinitializing plugin Logic...");
-
- // Remove all plugin models
- m_pluginModels.clear();
-
- // Remove all feature models
- m_featureModels.clear();
-
- // Clear standard features list
- m_standardFeatureList.clear();
-}
-
-bool PluginLogic::addPluginToSession(const PluginPtr& plugin)
-{
- LogInfo("Adding Plugin '" << plugin->GetFileName() <<
- "' to session of widget '" << m_widgetHandle << "'");
-
- if (isLoaded(plugin)) {
- LogWarning("Loading Feature " << plugin->GetFileName() <<
- " IGNORED. Plugin already loaded");
- return false;
- }
-
- LogDebug("Registering first feature from plugin.");
-
- // Save plugin to map
- m_loadedPlugins.insert(plugin);
-
- // This is first time for this plugin, start widget session
- plugin->OnWidgetStart(
- m_widgetHandle,
- WebkitInterfaceSingleton::Instance().getGlobalContext(m_view),
- m_engineInterface.Get());
-
- LogDebug("Emitted WidgetStart for plugin: " << plugin->GetFileName());
-
- // Add feature to list
- m_objectExplorer->printDebug();
-
- // Register new class
- FOREACH(it, *(plugin->GetClassList()))
- {
- m_objectExplorer->printDebug();
-
- if (!m_objectExplorer->registerObject(*it)) {
- LogError("Object Registration failed : " << (*it)->getName());
- }
- }
-
- LogDebug("Registered feature.");
-
- return true;
-}
-
-void PluginLogic::addStandardFeaturesToSession()
-{
- LogInfo("Installing standard widget features...");
-
- //add standard functions
- FOREACH(it, *JsFunctionManagerSingleton::Instance().GetFunctions())
- {
- m_objectExplorer->registerFunction(*it);
- }
-
- //add standard objects
- LogDebug("Installing standard extensions...");
-
- FOREACH(it, m_standardFeatureList)
- {
- FeatureModelPtr feature = findFeatureModel(*it);
- if (!feature) {
- LogWarning("This feature does not exist in Plugin DB");
- continue;
- }
-
- loadFeatureToSession(feature);
- }
-
- LogInfo("Standard widget features installed.");
-}
-
-bool PluginLogic::loadPluginDependencies(DbPluginHandle pluginHandle,
- bool rootObjectOnly)
-{
- LogDebug("Instaling dependencies");
- PluginModelPtr pluginModel = findPluginModel(pluginHandle);
- if (!pluginModel) {
- LogError("ERROR. Plugin model not found. Dont know what to do.");
- return false;
- }
-
- if (!pluginModel->LibraryDependencies.Get()) {
- LogInfo("Plugin has no dependencies");
- return true;
- }
-
- PluginHandleSetPtr dependencies = pluginModel->LibraryDependencies.Get();
- LogInfo("Number of required dependencies " << dependencies->size());
-
- FOREACH(dependency, *dependencies)
- {
- if (rootObjectOnly) {
- ImplementedObjectsList implObjs =
- PluginDAOReadOnly::getImplementedObjectsForPluginHandle(
- *dependency);
- bool rootObject = false;
- FOREACH(obj, implObjs)
- {
- /* This can be optimalized, but would need extra data in
- database. There should be a list of features that are
- allowed to be installed at widget start */
- if (obj->find(".") == obj->rfind(".")) {
- rootObject = true;
- break;
- }
- }
- if (!rootObject) {
- LogWarning("Ignore dependency");
- continue;
- }
- }
-
- if (!loadPluginDependencies(*dependency, rootObjectOnly)) {
- LogError("Failed to load dependencies");
- return false;
- }
-
- PluginModelPtr requiredModel = findPluginModel(*dependency);
- if (!requiredModel) {
- LogError("ERROR. Plugin model not found.");
- return false;
- }
-
- //get library instance from model
- PluginPtr depPlugin = loadLibrary(requiredModel);
- if (!depPlugin) {
- LogError("Plugin model NOT found for: " << *dependency);
- return false;
- }
-
- if (isLoaded(depPlugin)) {
- LogInfo("Plugin already loaded");
- continue;
- }
-
- // Load feature
- addPluginToSession(depPlugin);
- }
- return true;
-}
-
-void PluginLogic::addSpecialFeaturesToSession()
-{
- LogInfo("Installing special widget features...");
-
- //TODO it have to return LIST NOT SET!!!
- WidgetDAOReadOnly widgetDao(m_widgetHandle);
- DbWidgetFeatureSet features = widgetDao.getFeaturesList();
-
- FOREACH(it, features)
- {
- if (checkNonStandardSupportRequired(DPL::ToUTF8String(it->name))) {
- activateNonStandardFeature(*it);
- continue;
- }
-
- ImplementedObjectsList implObjs =
- PluginDAOReadOnly::getImplementedObjectsForPluginHandle(
- it->pluginId);
- bool rootObject = false;
- FOREACH(obj, implObjs)
- {
- /* This can be optimalized, but would need extra data in database.
- There should be a list of features that are allowed to be
- installed at widget start */
- if (obj->find(".") == obj->rfind(".")) {
- rootObject = true;
- break;
- }
- }
- if (!rootObject) {
- loadPluginDependencies(it->pluginId, true);
- LogWarning("Ignore feature " << it->name);
- continue;
- }
-
- LogDebug("Installing feature : " << it->name);
-
- FeatureModelPtr feature = findFeatureModel(DPL::ToUTF8String(it->name));
- if (!feature) {
- LogWarning("This feature does not exist in Plugin DB");
- continue;
- }
-
- loadFeatureToSession(feature);
- }
-
- LogInfo("Special widget features installed.");
-}
-
-void PluginLogic::addSpecialFeatureToSession(
- const WrtDB::DbWidgetFeature &widgetFeature)
-{
- if (!m_sessionStarted) {
- LogError("Session not started");
- return;
- }
-
- LogDebug("Installing feature : " << widgetFeature.name);
-
- FeatureModelPtr feature = findFeatureModel(
- DPL::ToUTF8String(widgetFeature.name));
- if (!feature) {
- LogWarning("This feature does not exist in Plugin DB");
- return;
- }
-
- loadFeatureToSession(feature);
-}
-
-// This is maintained temporarily for Web UI Framework.
-void PluginLogic::addScalePropertyToWindowObject(double scaleFactor)
-{
- LogInfo("Scale Factor by plugin-service : " << scaleFactor);
- // add extented property of window JSObject for scale factor
- JSGlobalContextRef context =
- static_cast<JSGlobalContextRef>(
- WebkitInterfaceSingleton::Instance().getGlobalContext(m_view));
- JSObjectRef globalObject = JSContextGetGlobalObject(context);
- // To use the following code only in case of child object of 'window'
- //JSStringRef childString = JSStringCreateWithUTF8CString("child");
- //JSValueRef child = JSObjectGetProperty(context, globalObject, childString , NULL);
- //JSObjectRef childObject = JSValueToObject(context, child, NULL);
- JSStringRef scaleString = JSStringCreateWithUTF8CString(SCALE_PROPERTY_NAME);
- JSObjectSetProperty(context, globalObject, scaleString,
- JSValueMakeNumber(context, scaleFactor),
- kJSPropertyAttributeReadOnly,
- NULL);
-}
-
-void PluginLogic::startSession(int widgetHandle,
- WebkitInterface::WebkitView view,
- const engine_interface_t &engineInterface,
- double scaleFactor)
-{
- LogInfo("Starting widget session...");
-
- // Check if corresponding session if not already created
- if (m_sessionStarted) {
- LogWarning("Session already started!");
- return;
- }
-
- // Create js object explorer object
- ExplorerPtr explorer(new Explorer(
- WebkitInterfaceSingleton::Instance().getGlobalContext(view)));
-
- m_sessionStarted = true;
- m_widgetHandle = widgetHandle;
- m_objectExplorer = explorer;
- m_loadedPlugins.clear();
- m_engineInterface.Reset(new engine_interface_t(engineInterface));
- m_view = view;
-
- // Register standard features
- addStandardFeaturesToSession();
-
- // Register special features
- addSpecialFeaturesToSession();
-
- // Add scale property to 'windown' object
- // This is maintained temporarily for Web UI Framework.
- addScalePropertyToWindowObject(scaleFactor);
-
- LogInfo("Widget session started.");
-}
-
-void PluginLogic::stopSession()
-{
- LogInfo("Stopping widget session...");
-
- if (!m_sessionStarted) {
- LogWarning("Session not started!");
- return;
- }
-
- unloadPluginsFromSession();
-
- // Erase widget session
- Assert(m_loadedPlugins.empty());
-
- m_sessionStarted = false;
-
- LogInfo("Widget session stopped.");
-}
-
-PluginPtr PluginLogic::findPlugin(const FeatureModelPtr &feature)
-{
- LogDebug("Feature located in plugin: " << feature->PHandle.Get());
- PluginModelPtr pluginModel = findPluginModel(feature->PHandle.Get());
-
- if (!pluginModel) {
- LogError("PluginModel not found");
- return PluginPtr();
- }
-
- return loadLibrary(pluginModel);
-}
-
-void PluginLogic::unloadPluginsFromSession()
-{
- LogDebug("Unload plugins from session");
-
- FOREACH(pluginIt, m_loadedPlugins)
- {
- LogDebug("Unregistering plugin " << (*pluginIt)->GetFileName());
-
- (*pluginIt)->OnWidgetStop(m_widgetHandle);
- LogDebug("Emitted WidgetStop for plugin: " <<
- (*pluginIt)->GetFileName());
-
-
- // Deregister class
- FOREACH(it, *((*pluginIt)->GetClassList()))
- {
- LogDebug("Deregister object " << (*it)->getName());
- if (!m_objectExplorer->deregisterObject(*it)) {
- LogError("Object Deregistration failed : " << (*it)->getName());
- }
- }
-
- }
-
- m_loadedPlugins.clear();
-}
-
-void PluginLogic::readPlugins()
-{
- LogDebug("Retrieving installed plugin list...");
- PluginHandleList plugins = PluginDAOReadOnly::getPluginHandleList();
- PluginHandleList::const_iterator pIter;
-
- FOREACH(it, plugins)
- {
- registerPluginModel(*it);
- }
-}
-
-void PluginLogic::readFeatures()
-{
- FOREACH(pluginIt, m_pluginModels)
- {
- PluginModelPtr model = *pluginIt;
- LogDebug("Analyzing Plugin model: " << model->Handle.Get());
-
- FeatureHandleListPtr featureHandles = model->FeatureHandles.Get();
- FOREACH(featureIt, *featureHandles)
- {
- LogDebug("Analyzing feature: " << *featureIt);
- registerFeatureModel(*featureIt, model->Handle.Get());
- }
- }
-}
-
-void PluginLogic::readStandardFeaturesList()
-{
- LogDebug("Reading standard features list from file...");
-
- std::string path = GlobalConfig::GetDevicePluginPath();
- path += "/";
- path += STANDARD_FEATURES_LIST_FILE;
-
- std::ifstream standardFeatureFile;
- standardFeatureFile.open(path.c_str(), std::ifstream::in);
-
- if (!standardFeatureFile.is_open()) {
- LogError("Reading standard features list from file FAILED.");
- return;
- }
-
- char buffer[1024];
-
- while (!standardFeatureFile.eof()) {
- standardFeatureFile.getline(buffer, sizeof(buffer));
-
- if (buffer[0] == '\0') {
- break;
- }
-
- LogDebug("Standard Feature: <" << buffer << ">");
- m_standardFeatureList.push_back(std::string(buffer));
- }
-
- standardFeatureFile.close();
-}
-
-void PluginLogic::registerPluginModel(DbPluginHandle handle)
-{
- PluginModelPtr model = findPluginModel(handle);
-
- if (model) {
- LogDebug("Model for plugin:" << handle << " already registered");
- return;
- }
-
- LogDebug("Creating Model for plugin: " << handle);
-
- if (PluginDAOReadOnly::getInstallationStateForHandle(handle)
- != PluginDAOReadOnly::INSTALLATION_COMPLETED)
- {
- LogWarning("Failed To CreateModel for handle " << handle);
- return;
- }
-
- model.Reset(new PluginModel(handle));
-
- LogInfo("Model Created. Handle: " <<
- handle << ", name: " << model->LibraryName.Get());
-
- m_pluginModels.insert(model);
-}
-
-void PluginLogic::registerCustomFeatures(DbPluginHandle handle)
-{
- PluginModelPtr model = findPluginModel(handle);
- LogDebug("Registering custom features for plugin model");
-
- if (!model) {
- //TODO
- //check Installation status before creation - it shouldnt happen but ..
- registerPluginModel(handle);
- model = findPluginModel(handle);
- }
-
- if (!model) {
- LogWarning(
- "Cannot register custom features. Plugin modelcannot be created!");
- return;
- }
-
- FeatureHandleListPtr featureHandles = model->FeatureHandles.Get();
- FOREACH(featureIt, *featureHandles)
- {
- LogInfo("Plugin: " << handle << " Feature: " << *featureIt);
- registerFeatureModel(*featureIt, model->Handle.Get());
- }
-}
-
-void PluginLogic::registerFeatureModel(FeatureHandle featureHandle,
- WrtDB::DbPluginHandle pluginHandle)
-{
- FeatureModelPtr model = findFeatureModel(featureHandle);
-
- if (model) {
- LogDebug("Model for feature:" << featureHandle << " already created");
- return;
- }
-
- LogDebug("Creating Model for feature:" << featureHandle);
-
- // Create new model
- model.Reset(new FeatureModel(featureHandle));
-
- // Read DAO data
- FeatureDAOReadOnly dao(featureHandle);
- // PluginHandle pluginHandle = dao.GetPluginHandle();
-
- model->Name.Set(dao.GetName());
- model->DeviceCapabilities.Set(dao.GetDeviceCapabilities());
- model->PHandle.Set(pluginHandle);
-
- // Insert new model into map
- m_featureModels.insert(model);
-}
-
-FeatureModelPtr PluginLogic::findFeatureModel(const std::string &name)
-{
- FOREACH(iter, m_featureModels)
- {
- if ((*iter)->Name.Get() == name) {
- return *iter;
- }
- }
-
- return FeatureModelPtr();
-}
-
-FeatureModelPtr PluginLogic::findFeatureModel(const FeatureHandle handle)
-{
- FOREACH(iter, m_featureModels)
- {
- if ((*iter)->FHandle.Get() == handle) {
- return *iter;
- }
- }
-
- return FeatureModelPtr();
-}
-
-PluginModelPtr PluginLogic::findPluginModel(DbPluginHandle handle)
-{
- FOREACH(pluginModel, m_pluginModels)
- {
- if ((*pluginModel)->Handle.Get() == handle) {
- return *pluginModel;
- }
- }
-
- return PluginModelPtr();
-}
-
-void PluginLogic::performLibrariesUnload()
-{
- LogDebug("Perform library unload");
-
- size_t unloadedLibraries = 0;
-
- FOREACH(pluginIt, m_pluginModels)
- {
- LogDebug("Preparing library: " << (*pluginIt)->LibraryName.Get());
-
- PluginPtr plugin = (*pluginIt)->LibraryInstance.Get();
- if (!plugin) {
- LogWarning("Library not loaded " << (*pluginIt)->LibraryName.Get());
- continue;
- }
- unloadedLibraries++;
- (*pluginIt)->LibraryInstance.Set(PluginPtr());
- }
-
- LogInfo("unloaded " << unloadedLibraries << " unreferenced libraries!");
-}
-
-bool PluginLogic::checkNonStandardSupportRequired(
- const std::string &featureName) const
-{
- /* currently we have just one feature which require special behaviour */
- return featureName == GlobalConfig::GetW3CGeolocationFeatureName();
-}
-
-void PluginLogic::activateNonStandardFeature(
- const WrtDB::DbWidgetFeature& feature)
-{
- string featureName = DPL::ToUTF8String(feature.name);
-
- if (featureName == GlobalConfig::GetW3CGeolocationFeatureName()) {
- LogDebug("Geolocation will be enabled for widget");
-
- if (!m_view) {
- LogError("Error widget view is NULL");
- return;
- }
-
- WebkitInterfaceSingleton::Instance().setGeolocation(m_view, true);
- }
-}
-
-void PluginLogic::loadFeatureToSession(const FeatureModelPtr& feature)
-{
- PluginPtr plugin = findPlugin(feature);
- if (!plugin) {
- LogWarning("Cannot load plugin for feature: " << feature->Name.Get());
- return;
- }
- if (isLoaded(plugin)) {
- LogInfo("Plugin already loaded");
- return;
- }
-
- if (!loadPluginDependencies(feature->PHandle.Get())) {
- LogError("Failed to load one of the dependencies for: " <<
- feature->Name.Get() << " some feature may not work");
- }
-
- // Load feature
- addPluginToSession(plugin);
-}
-
-bool PluginLogic::isLoaded(const PluginPtr& plugin)
-{
- //check if feature is already loaded for session
- return m_loadedPlugins.find(plugin) != m_loadedPlugins.end();
-}
-
-PluginPtr PluginLogic::loadLibrary(PluginModelPtr& pluginModel)
-{
- PluginPtr pluginLib = pluginModel->LibraryInstance.Get();
- if (!pluginLib) {
- std::string path = pluginModel->LibraryPath.Get() +
- std::string(LIBRARY_PATH_SEPARATOR) +
- pluginModel->LibraryName.Get();
- pluginLib = Plugin::LoadFromFile(path);
- }
-
- if (!pluginLib) {
- LogError("Loading library failed");
- } else {
- pluginModel->LibraryInstance.Set(pluginLib);
- }
-
- return pluginLib;
-}
-
-void PluginLogic::loadPluginsIntoIframes()
-{
- LogDebug("Load plugins into iframes");
-
- m_objectExplorer->loadPluginsIntoIframes();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_logic.h
- * @author Piotr Fatyga (p.fatyga@samsung.com)
- * @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of plugin and feature
- * loading routines
- * @brief This code is intended to work behind view controller
- */
-#ifndef PLUGIN_LOGIC_H
-#define PLUGIN_LOGIC_H
-
-#include <vector>
-#include <set>
-#include <dpl/singleton.h>
-#include <dpl/noncopyable.h>
-#include <dpl/scoped_ptr.h>
-#include <dpl/atomic.h>
-#include <dpl/wrt-dao-ro/plugin_dao_read_only.h>
-#include <dpl/wrt-dao-ro/feature_model.h>
-#include <webkit_interface.h>
-#include <wrt_plugin_export.h>
-#include <plugin_model.h>
-#include <plugin.h>
-#include <explorer.h>
-
-class PluginLogic
-{
- private:
- typedef std::set<PluginPtr> LoadedPlugins;
-
- ///< Widget handle using this session
- int m_widgetHandle;
-
- ///< JS object explorer for this session
- ExplorerPtr m_objectExplorer;
-
- ///< All loaded plugins. Each one must be unloaded. Plugins means
- //set of features connected with such plugin (library)
- LoadedPlugins m_loadedPlugins;
-
- ///< Engine interface for this session
- DPL::ScopedPtr<engine_interface_t> m_engineInterface;
-
- //view for this session
- WebkitInterface::WebkitView m_view;
-
- bool m_sessionStarted;
-
- // Main plugin list. Always equal to DB plugin list
- typedef std::set<PluginModelPtr> PluginModelsContainer;
- PluginModelsContainer m_pluginModels;
-
- // Main feature list. Always equal to DB feature list
- typedef std::set<WrtDB::FeatureModelPtr> FeatureModelContainer;
- FeatureModelContainer m_featureModels;
-
- // Standard features
- typedef std::list<std::string> StandardFeatureList;
- StandardFeatureList m_standardFeatureList;
-
- PluginPtr findPlugin(const WrtDB::FeatureModelPtr &feature);
-
- PluginPtr loadLibrary(PluginModelPtr& pluginModel);
-
- // Installing feature routines
- void addStandardFeaturesToSession();
- void addSpecialFeaturesToSession();
- void addScalePropertyToWindowObject(double scaleFactor);
- bool checkNonStandardSupportRequired(const std::string &featureName) const;
- bool loadPluginDependencies(WrtDB::DbPluginHandle pluginHandle,
- bool rootObjectOnly = false);
- void activateNonStandardFeature(const WrtDB::DbWidgetFeature &feature);
- void loadFeatureToSession(const WrtDB::FeatureModelPtr& feature);
-
- void unloadPluginsFromSession();
- /**
- * add feature to session
- * @return true if feature was add
- * false otherwise
- */
- bool addPluginToSession(const PluginPtr& plugin);
-
- bool isLoaded(const PluginPtr& plugin);
-
- // Plugin models
- void registerPluginModel(WrtDB::DbPluginHandle handle);
-
- PluginModelPtr findPluginModel(WrtDB::DbPluginHandle handle);
-
- // Feature models
- void registerFeatureModel(WrtDB::FeatureHandle handle,
- WrtDB::DbPluginHandle pluginHandle);
-
- WrtDB::FeatureModelPtr findFeatureModel(const std::string &name);
- WrtDB::FeatureModelPtr findFeatureModel(WrtDB::FeatureHandle handle);
-
- // Reading
- void readPlugins();
- void readFeatures();
- void readStandardFeaturesList();
-
- public:
- virtual ~PluginLogic();
-
- // Widget session
- void startSession(int widgetHandle,
- WebkitInterface::WebkitView view,
- const engine_interface_t &engineInterface,
- double scaleFactor);
-
- void stopSession();
-
- void performLibrariesUnload();
-
- void registerCustomFeatures(WrtDB::DbPluginHandle handle);
-
- void addSpecialFeatureToSession(const WrtDB::DbWidgetFeature &widgetFeature);
-
- void loadPluginsIntoIframes();
-
- private:
- PluginLogic();
-
- friend class DPL::Singleton<PluginLogic>;
-};
-
-typedef DPL::Singleton<PluginLogic> PluginLogicSingleton;
-
-#endif // PLUGIN_LOGIC_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_model.cpp
- * @author Pawel Sikorski (p.sikorski@samgsung.com)
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samgsung.com)
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief This file contains PluginModel, PluginHandle definitions.
- */
-
-#include "plugin_model.h"
-#include <dpl/event/model_bind_to_dao.h>
-#include <dpl/wrt-dao-ro/feature_dao_read_only.h>
-
-using namespace WrtDB;
-
-template <typename RetType, RetType(PluginDAOReadOnly::*extFun) () const >
-struct BindToPluginDAO :
- DPL::Event::BindToDAO<PluginModel,
- RetType,
- WrtDB::DbPluginHandle,
- PluginDAOReadOnly,
- &PluginModel::getHandle,
- extFun>
-{
-};
-
-template <typename RetType, RetType(*extFun) (WrtDB::DbPluginHandle)>
-struct BindToFeatureDAOStatic :
- DPL::Event::BindToDAO_Static<PluginModel,
- RetType,
- WrtDB::DbPluginHandle,
- &PluginModel::getHandle,
- extFun>
-{
-};
-
-PluginModel::PluginModel(const WrtDB::DbPluginHandle& handle) :
- Handle(this, handle),
- LibraryName(this,
- BindToPluginDAO<std::string,
- &PluginDAOReadOnly::getLibraryName>::Get),
- LibraryPath(this,
- BindToPluginDAO<std::string,
- &PluginDAOReadOnly::getLibraryPath>::Get),
- FeatureHandles(this,
- BindToFeatureDAOStatic<FeatureHandleListPtr,
- FeatureDAOReadOnly::GetFeatureHandleListForPlugin>::Get),
- LibraryDependencies(this,
- BindToPluginDAO<PluginHandleSetPtr,
- &PluginDAOReadOnly::getLibraryDependencies>::Get),
- LibraryInstance(this, PluginPtr()),
- InstallURI(this,
- BindToPluginDAO<std::string,
- &PluginDAOReadOnly::getInstallURI>::Get),
- KeyCn(this, BindToPluginDAO<std::string,&PluginDAOReadOnly::getKeyCn>::Get),
- RootKey(this,
- BindToPluginDAO<std::string,
- &PluginDAOReadOnly::getRootKey>::Get),
- RootKeyFingerprint(this,
- BindToPluginDAO<std::string,
- &PluginDAOReadOnly::getRootKeyFingerprint>::Get)
-{
-}
-
-WrtDB::DbPluginHandle PluginModel::getHandle() const
-{
- return Handle.Get();
-}
-
-bool PluginModel::operator< (const PluginModel& obj) const
-{
- return obj.Handle.Get() < Handle.Get();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_model.h
- * @author Pawel Sikorski (p.sikorski@samgsung.com)
- * @author Grzegorz Krawczyk (g.krawczyk@samgsung.com)
- * @version
- * @brief This file contains PluginModel, PluginHandle definitions.
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_PLUGIN_MODEL_H_
-#define WRT_SRC_PLUGIN_SERVICE_PLUGIN_MODEL_H_
-
-#include <string>
-#include <list>
-#include <dpl/shared_ptr.h>
-#include <dpl/event/model.h>
-#include <dpl/event/property.h>
-
-#include <dpl/wrt-dao-ro/feature_model.h>
-#include <dpl/wrt-dao-ro/plugin_dao_read_only.h>
-#include <plugin.h>
-
-class PluginModel;
-
-class PluginModel : public DPL::Event::Model
-{
- public:
-
- /**
- *@brief Plugin handle
- */
- DPL::Event::Property<WrtDB::DbPluginHandle, DPL::Event::PropertyReadOnly> Handle;
-
- /**
- *@brief LibraryName
- */
- DPL::Event::Property<std::string,
- DPL::Event::PropertyReadOnly,
- DPL::Event::PropertyStorageDynamicCached> LibraryName;
-
- /**
- *@brief Library Path
- */
- DPL::Event::Property<std::string,
- DPL::Event::PropertyReadOnly,
- DPL::Event::PropertyStorageDynamicCached> LibraryPath;
-
- /**
- *@brief Feature set
- */
- DPL::Event::Property<WrtDB::FeatureHandleListPtr,
- DPL::Event::PropertyReadOnly,
- DPL::Event::PropertyStorageDynamicCached> FeatureHandles;
-
- /**
- *@brief Librarydepencies
- */
- DPL::Event::Property<WrtDB::PluginHandleSetPtr,
- DPL::Event::PropertyReadOnly,
- DPL::Event::PropertyStorageDynamicCached> LibraryDependencies;
-
- /**
- *@brief Library instance Low Level
- * */
- DPL::Event::Property<PluginPtr,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageCached> LibraryInstance;
-
- /**
- *@brief InstallUri
- */
- DPL::Event::Property<std::string,
- DPL::Event::PropertyReadOnly,
- DPL::Event::PropertyStorageDynamicCached> InstallURI;
-
- /**
- *@brief RootKeyCN
- */
- DPL::Event::Property<std::string,
- DPL::Event::PropertyReadOnly,
- DPL::Event::PropertyStorageDynamicCached> KeyCn;
-
- /**
- *@brief RootKey
- */
- DPL::Event::Property<std::string,
- DPL::Event::PropertyReadOnly,
- DPL::Event::PropertyStorageDynamicCached> RootKey;
-
- /**
- *@brief RootKeyFingerprint
- */
- DPL::Event::Property<std::string,
- DPL::Event::PropertyReadOnly,
- DPL::Event::PropertyStorageDynamicCached> RootKeyFingerprint;
-
- public:
- PluginModel(const WrtDB::DbPluginHandle& handle);
-
- bool operator< (const PluginModel& obj) const;
-
- private:
- WrtDB::DbPluginHandle getHandle() const;
-};
-
-typedef DPL::SharedPtr<PluginModel> PluginModelPtr;
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file WebkitInterface.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @author Piotr Fatyga (p.fatyga@samsung.com)
- * @version 0.1
- * @brief
- */
-#ifndef WRT_SRC_PLUGIN_SERVICE_WEBKIT_INTERFACE_H_
-#define WRT_SRC_PLUGIN_SERVICE_WEBKIT_INTERFACE_H_
-
-#include <string>
-#include <vector>
-#include <memory>
-#include <list>
-#include <dpl/noncopyable.h>
-#include <dpl/singleton.h>
-#include <js_object.h>
-#include <js_object_declaration.h>
-#include <js_function_declaration.h>
-
-class WebkitInterface : DPL::Noncopyable
-{
- public:
- typedef void *WebkitView;
- typedef void *WebkitContext;
- typedef std::vector<std::string> PropertiesList;
-
- typedef std::list<JSObjectPtr> ObjectsList;
- typedef std::shared_ptr<ObjectsList> ObjectsListPtr;
-
- public:
- WebkitContext getGlobalContext(WebkitView webkitView);
-
- JSObjectPtr getGlobalObject(WebkitContext context);
-
- // object creation
- JSObjectPtr createObject(WebkitContext context,
- const JSObjectDeclarationPtr& declaration);
-
- JSObjectPtr createFunctionInstance(WebkitContext context,
- const JSFunctionDeclarationPtr& function);
-
- //properties
- void setObjectProperty(WebkitContext context,
- const JSObjectPtr& parentObject,
- const std::string &propertyName,
- const JSObjectPtr& propertyObject);
-
- void removeObjectProperty(WebkitContext context,
- const JSObjectPtr& parentObject,
- const std::string &propertyName);
-
- PropertiesList getObjectPropertiesList(WebkitContext context,
- const JSObjectPtr& object) const;
-
- void setGeolocation(WebkitView webkitView,
- bool state);
-
- JSObjectPtr copyObjectToIframe(
- WebkitInterface::WebkitContext context,
- const JSObjectPtr& iframe,
- const std::string& name);
-
- JSObjectPtr createOverlayedFunction(WebkitContext ctx,
- const JSObjectPtr& originalFunction,
- const JSObjectPtr& overlayFunction,
- const std::string& name) const;
-
- ObjectsListPtr getIframesList(WebkitContext context) const;
-
- JSObjectPtr getJSObjectProperty(WebkitContext ctx,
- const JSObjectPtr& frame,
- const std::string& name) const;
-
- private:
- WebkitInterface()
- {
- }
-
- friend class DPL::Singleton<WebkitInterface>;
-};
-
-typedef DPL::Singleton<WebkitInterface> WebkitInterfaceSingleton;
-
-#endif // _WEBKITINTERFACE_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_plugin_export.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Header file for plugin export API
- */
-#ifndef WRT_PLUGIN_EXPORT_H
-#define WRT_PLUGIN_EXPORT_H
-
-#include <stddef.h>
-
-/**
- * Widget handle type
- */
-typedef int widget_handle_t;
-
-/**
- * Invalid Widget handle
- */
-#define INVALID_WIDGET_HANDLE (-1)
-
-/**
- * Parameter which should be used during policy evaluation.
- */
-typedef struct ace_param_s
-{
- const char *name;
- const char *value;
-} ace_param_t;
-
-/**
- * List of additional parameters which should be used during policy evaluation.
- */
-typedef struct ace_param_list_s
-{
- size_t count;
- ace_param_t *param;
-} ace_param_list_t;
-
-/**
- * Contains list of device capabilities. Each device capability may have
- * associated list of function params.
- */
-typedef struct ace_device_cap_s
-{
- size_t devcapsCount;
- const char** dev_cap_names;
- size_t paramsCount;
- ace_param_list_t* params;
-} ace_device_cap_t;
-
-/**
- * List of device capabilities which must be check.
- */
-typedef struct ace_device_capabilities_s
-{
- size_t count;
- const char **device_cap;
-} ace_device_capabilities_t;
-
-/**
- * List of api features that must be checked
- */
-typedef struct ace_api_features_s
-{
- size_t count;
- const char **api_feature;
-} ace_api_features_t;
-
-/**
- * Data from request will be used to evaluate policy file.
- */
-typedef struct ace_request_s
-{
- widget_handle_t widget_handle;
- const char* feature_api;
- const char* function_name;
- ace_device_capabilities_t device_capabilities;
- ace_param_list_t param_list;
-} ace_request_t;
-
-/**
- * Data from request will be used to evaluate policy file.
- */
-typedef struct ace_request_2_s
-{
- widget_handle_t widget_handle;
- ace_api_features_t api_features;
- const char* function_name;
- ace_device_cap_t device_capabilities;
-} ace_request_2_t;
-
-/**
- * info returned by plugin_api_check_access
- */
-#define PLUGIN_API_ACCESS_GRANTED 1
-#define PLUGIN_API_ACCESS_DENIED 0
-#define PLUGIN_API_ACCESS_ERROR -1
-
-
-typedef const void* java_script_context_t;
-
-typedef struct js_object_properties_s
-{
- size_t count;
- char** properties;
-} js_object_properties_t;
-
-/*
- * Camera API
- * */
-typedef void* camera_object;
-typedef enum {
- CAMERA_TYPE_FRONT,
- CAMERA_TYPE_REAR,
- CAMERA_TYPE_UNKNOWN
-} camera_type;
-typedef void* camera_node;
-typedef int camera_operation;
-typedef void (*camera_capture_success_cb) (const char* filename, void*);
-typedef void (*camera_error_cb) (int errorcode, void* userData);
-typedef void (*camera_preview_success_cb) (const camera_node element, void*);
-typedef void (*camera_set_pending_operation)(camera_operation,
- void* private_data);
-
-struct webkit_camera
-{
- camera_object camera;
- camera_type type;
-};
-
-struct webkit_cameras_array
-{
- size_t size;
- webkit_camera* webkit_cameras;
-};
-
-/*
- * Functions provided by WRT-Engine (to be used from plugin).
- * It's passed in on_widget_start callback.
- * If some entry is NULL - the corresponding function is not allowed
- * by the engine.
- */
-typedef struct engine_interface_s
-{
- /**
- * For a given widget, checks access status to a plugin function. Security
- * check is evaluated basing on device-caps
- *
- * @return PLUGIN_API_ACCESS_GRANTED - access to the function is granted
- * PLUGIN_API_ACCESS_DENIED - access to the function is denied
- * PLUGIN_API_ACCESS_ERROR - internal error in wrt occured
- */
- int (*wrt_check_access2)(const ace_request_2_t *ace_request);
-
- /**
- * Camera API
- * */
- void (*wrt_camera_free_webkit_cameras)(webkit_cameras_array* cameras);
-
- webkit_cameras_array* (*wrt_camera_get_cameras)(
- widget_handle_t widgetHandle);
-
- int (*wrt_camera_remove_camera)(widget_handle_t widgetHandle,
- camera_object camera);
-
- int (*wrt_camera_create_preview_node)(
- widget_handle_t widgetHandle,
- camera_object camera,
- camera_preview_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation operation,
- void* data);
-
- int (*wrt_camera_capture_image)(widget_handle_t widgetHandle,
- camera_object camera,
- const char* filename,
- int highRes,
- camera_capture_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation operation,
- void* data);
-
- int (*wrt_camera_start_video_capture)(
- widget_handle_t widgetHandle,
- camera_object camera,
- const char* filename,
- int highRes,
- camera_capture_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation operation,
- void* data);
-
- int (*wrt_camera_stop_video_capture)(widget_handle_t widgetHandle,
- camera_object camera);
-
- int (*wrt_camera_cancel_async_operation)(widget_handle_t widgetHandle,
- camera_object camera,
- const camera_operation operation);
-
-} engine_interface_t;
-
-typedef const void* js_class_template_t;
-
-typedef enum class_definition_type_e
-{
- JS_CLASS,
- JS_FUNCTION
-} class_definition_type_t;
-
-typedef enum class_definition_iframe_behaviour_e
-{
- //object should not be initalized in iframes
- //it is default one
- NONE,
- //object should be copied as reference to each iframe
- REFERENCE,
- //object should be created for each iframe and NOT inform plugin
- CREATE_INSTANCE,
-} class_definition_iframe_behaviour_t;
-
-typedef enum class_definition_iframe_notice_e
-{
- //it is default one
- NONE_NOTICE,
- ALWAYS_NOTICE
-} class_definition_iframe_notice_t;
-
-typedef enum class_definition_iframe_overlay_e
-{
- USE_ORGINAL,
- USE_OVERLAYED,
- OVERLAYED_BEFORE_ORIGINAL
-} class_definition_iframe_overlay_t;
-
-typedef void* js_object_instance_t;
-//global_context - id
-typedef void(*iframe_loaded_cb)(java_script_context_t global_context,
- js_object_instance_t iframe,
- js_object_instance_t object);
-
-typedef struct class_definition_options_s
-{
- class_definition_type_t type;
- class_definition_iframe_behaviour_t iframe_option;
- class_definition_iframe_notice_t iframe_notice;
- class_definition_iframe_overlay_t iframe_overlay;
- iframe_loaded_cb cb;
- void * private_data;
-} class_definition_options_t;
-
-
-/*
- * list of device caps
- */
-typedef struct devcaps_s
-{
- char** deviceCaps;
- size_t devCapsCount;
-} devcaps_t;
-
-/*
- * mapping from a feature to corresponding list of device capabilities
- */
-typedef struct feature_devcaps_s
-{
- char* feature_name;
- devcaps_t devCaps;
-} feature_devcaps_t;
-
-/*
- * list of feature_devcaps_t structs
- */
-typedef struct feature_mapping_s
-{
- feature_devcaps_t* features;
- size_t featuresCount;
-} feature_mapping_t;
-
-/*
- * This is a structure describing a JS class templated, object name and
- * it's parent class name (parent_name)
- * JS class will be bind to a parent class name (parent_name.jsclass_name).
- * @param parent_name - parent name (ie Widget.Device)
- * @param object_name - object name (DeviceStatus)
- * @param js_class_template - js_class_template required to create JS object
- * @param private_data private data for object creator if required
- * (usually NULL)
- */
-typedef struct class_definition_s
-{
- const char *parent_name;
- const char *object_name;
- js_class_template_t js_class_template;
- //class options may be null - default
- class_definition_options_t* class_options;
-} class_definition_t;
-
-/**
- * FIXME: Add documentation
- */
-typedef const class_definition_t *class_definition_ptr_t;
-
-/**
- * Plugin export names
- */
-#define PLUGIN_WIDGET_START_PROC on_widget_start
-#define PLUGIN_WIDGET_STOP_PROC on_widget_stop
-#define PLUGIN_CLASS_MAP class_map
-#define PLUGIN_GET_CLASS_PROC_MAP get_widget_class_map
-
-#define PLUGIN_WIDGET_START_PROC_NAME "on_widget_start"
-#define PLUGIN_WIDGET_STOP_PROC_NAME "on_widget_stop"
-#define PLUGIN_CLASS_MAP_NAME "class_map"
-#define PLUGIN_GET_CLASS_MAP_PROC_NAME "get_widget_class_map"
-
-/**
- * Plugin export typedefs
- */
-typedef void (*on_widget_start_proc)(int widgetId,
- java_script_context_t context,
- const engine_interface_t *interface);
-
-/**
- * FIXME: Add documentation
- */
-typedef void (*on_widget_stop_proc)(int widgetId);
-
-typedef const class_definition_t* (*get_widget_class_map_proc)();
-
-#endif // WRT_PLUGIN_EXPORT_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_plugin_api.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file contains definitions of wrt plugin api
- */
-#include "plugin_api.h"
-#include <string>
-#include <cstring>
-#include <set>
-#include <dpl/exception.h>
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-#include <dpl/optional.h>
-#include <dpl/string.h>
-#include <dpl/optional_typedefs.h>
-#include <dpl/wrt-dao-ro/feature_dao_read_only.h>
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-#include <widget_logic.h>
-#include <widget_controller.h>
-#include <security_controller.h>
-#include <view_logic.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <dpl/wrt-dao-ro/widget_config.h>
-#include <attribute_facade.h>
-#include <plugin_api_controller.h>
-#include <plugin_api_logic.h>
-#include <dpl/ace/Request.h>
-
-using namespace WrtDB;
-
-const engine_interface_t DEFAULT_ENGINE_INTERFACE = {
- &plugin_api_check_access_2,
- &plugin_api_camera_free_webkit_cameras,
- &plugin_api_camera_get_cameras,
- &plugin_api_camera_remove_camera,
- &plugin_api_camera_create_preview_node,
- &plugin_api_camera_capture_image,
- &plugin_api_camera_start_video_capture,
- &plugin_api_camera_stop_video_capture,
- &plugin_api_camera_cancel_async_operation
-};
-
-namespace {
-const std::string GLOBAL_OBJECT_NAME = "GLOBAL_OBJECT";
-
-char *nstrdup(const char *x)
-{
- size_t l = strlen(x);
- char *r = new char[l + 1];
- strcpy(r, x);
- return r;
-}
-
-static std::string TOKEN_PARAM_FUNCTION = "param:function";
-
-Request convertToRequest(const ace_request_t *ace_request,
- WidgetModel *widgetModel,
- FunctionParamImpl *functionParam,
- RequestContext *context)
-{
- Assert(ace_request);
- Assert(widgetModel);
- Assert(functionParam);
-
- functionParam->addAttribute(TOKEN_PARAM_FUNCTION,
- ace_request->function_name);
-
- DPL::OptionalString widgetGUID = widgetModel->GUID.Get();
-
- Request request(context->Handle,
- WidgetExecutionPhase_Unknown,
- functionParam);
-
- for (size_t i = 0; i < ace_request->device_capabilities.count; ++i) {
- request.addDeviceCapability(
- ace_request->device_capabilities.device_cap[i]);
- }
-
- for (size_t i = 0; i < ace_request->param_list.count; i++) {
- Assert(ace_request->param_list.param[i].name &&
- ace_request->param_list.param[i].value);
-
- functionParam->addAttribute(
- std::string(ace_request->param_list.param[i].name),
- std::string(ace_request->param_list.param[i].value));
- }
- return request;
-}
-
-FunctionParams createFunctionParams(const ace_request_2_t* ace_request)
-{
- Assert(ace_request);
-
- const ace_device_cap_t& devcaps = ace_request->device_capabilities;
- FunctionParams functionParams(devcaps.devcapsCount);
-
- for (size_t i = 0; i < devcaps.devcapsCount; ++i) {
- FunctionParamImpl functionParam;
- functionParam.addAttribute(TOKEN_PARAM_FUNCTION,
- ace_request->function_name);
-
- if (devcaps.paramsCount) {
- Assert(devcaps.params);
-
- for (size_t j = 0; j < devcaps.params[i].count; ++j) {
- Assert(devcaps.params[i].param &&
- devcaps.params[i].param[j].name &&
- devcaps.params[i].param[j].value);
-
- functionParam.addAttribute(
- std::string(devcaps.params[i].param[j].name),
- std::string(devcaps.params[i].param[j].value));
- }
- }
-
- functionParams.push_back(functionParam);
- }
-
- return functionParams;
-}
-
-void convertToRequests(const ace_request_2_t *ace_request,
- WidgetModel *widgetModel,
- FunctionParams& functionParams,
- Requests& outRequests,
- RequestContext *context)
-{
- Assert(ace_request);
- Assert(widgetModel);
-
- DPL::OptionalString widgetGUID = widgetModel->GUID.Get();
-
- for (size_t i = 0; i < ace_request->device_capabilities.devcapsCount; ++i) {
- Request request(context->Handle,
- context->Phase,
- &functionParams[i]);
-
- Assert(ace_request->device_capabilities.dev_cap_names);
- request.addDeviceCapability(
- ace_request->device_capabilities.dev_cap_names[i]);
- outRequests.push_back(request);
- }
-}
-
-} // namespace anonymous
-
-
-int plugin_api_check_access_2(const ace_request_2_t *ace_request)
-{
- if (!ace_request) {
- LogError("Null request received from plugin");
- return PLUGIN_API_ACCESS_ERROR;
- }
-
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- WidgetModel *widgetModel = NULL;
-
- // Post event to widget controller
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::getWidgetModelEvent(
- &widgetModel));
-
- if (!widgetModel) {
- return PLUGIN_API_ACCESS_ERROR;
- }
-
- WidgetDAO widgetDao(ace_request->widget_handle);
- WidgetFeatureSet featureContainer = widgetDao.getFeaturesList();
- WidgetFeature feature;
-
- bool featureFound = false;
- for (size_t i = 0; i < ace_request->api_features.count; ++i) {
- Assert(ace_request->api_features.api_feature[i]);
- DPL::String featureAPIName =
- DPL::FromUTF8String(ace_request->api_features.api_feature[i]);
- feature.name = featureAPIName;
- WidgetFeatureSet::const_iterator it =
- featureContainer.find(feature);
-
- if (it != featureContainer.end()) {
- featureFound = true;
- break;
- }
- }
-
- if (!featureFound) {
- LogError("Trying to access to feature that wasn't requested");
- return PLUGIN_API_ACCESS_DENIED;
- }
-
- ViewLogicSingleton::Instance().javaScriptSuspend(widgetModel);
-
- Requests requests;
- FunctionParams functionParams = createFunctionParams(ace_request);
-
- RequestContext context(widgetModel->Handle.Get(),
- WidgetExecutionPhase_Invoke);
-
- convertToRequests(ace_request,
- widgetModel,
- functionParams,
- requests,
- &context);
-
- bool retValue = true;
- PolicyResult result;
- FOREACH(it, requests)
- {
- CONTROLLER_POST_SYNC_EVENT(
- SecurityController,
- SecurityControllerEvents::CheckFunctionCallSyncEvent(
- &result,
- &(*it)));
- OptionalPolicyEffect effect = result.getEffect();
- if (effect.IsNull()) {
- retValue = false;
- break;
- }
- if (*effect != PolicyEffect::PERMIT) {
- retValue = false;
- break;
- }
- }
-
- ViewLogicSingleton::Instance().javaScriptResume(widgetModel);
-
- if (retValue) {
- return PLUGIN_API_ACCESS_GRANTED;
- } else {
- return PLUGIN_API_ACCESS_DENIED;
- }
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-void plugin_api_camera_free_webkit_cameras(webkit_cameras_array* cameras)
-{
- delete[] cameras;
-}
-
-webkit_cameras_array* plugin_api_camera_get_cameras(
- widget_handle_t widgetHandle)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogDebug("API get cameras init");
-
- PluginApiControllerEventsTypes::CameraGetCamerasEventDataPtr eventData(
- new PluginApiControllerEventsTypes::
- PluginCameraGetCamerasDataEvent);
-
- eventData->widgetHandle = widgetHandle;
- eventData->cameras = new webkit_cameras_array();
- CONTROLLER_POST_SYNC_EVENT(
- PluginApiController,
- PluginApiControllerEvents::GetCamerasEvent(eventData));
-
- return eventData->cameras;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-int plugin_api_camera_remove_camera(widget_handle_t /*widgetHandle*/,
- camera_object camera)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogDebug("API remove camera");
- PluginApiControllerEventsTypes::CameraBaseEventDataPtr eventData(
- new PluginApiControllerEventsTypes::PluginCameraBaseEventData);
-
- eventData->camera = camera;
-
- CONTROLLER_POST_EVENT(
- PluginApiController,
- PluginApiControllerEvents::RemoveCameraEvent(eventData));
-
- LogDebug("API remove camera end");
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-int plugin_api_camera_create_preview_node(
- widget_handle_t widgetHandle,
- camera_object camera,
- camera_preview_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation pendingOperationCb,
- void* userData)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogDebug("API create preview start");
-
- PluginApiControllerEventsTypes::CameraCreatePreviewEventDataPtr
- eventData(new PluginApiControllerEventsTypes::
- PluginCameraCreatePreviewEventData);
-
- eventData->widgetHandle = widgetHandle;
- eventData->camera = camera;
- eventData->errorCallback = errorCallback;
- eventData->userData = userData;
- eventData->successCallback = successCallback;
- eventData->pending_operation_cb = pendingOperationCb;
-
- CONTROLLER_POST_EVENT(
- PluginApiController,
- PluginApiControllerEvents::CreatePreviewEvent(eventData));
-
- LogDebug("API create preview end");
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-int plugin_api_camera_capture_image(
- widget_handle_t widgetHandle,
- camera_object camera,
- const char* filename,
- int highRes,
- camera_capture_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation pendingOperationCb,
- void* userData)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogDebug("API camera capture");
-
- PluginApiControllerEventsTypes::CameraCaptureImageEventDataPtr
- eventData(new PluginApiControllerEventsTypes::
- PluginCameraCaptureImageEventData);
-
- eventData->widgetHandle = widgetHandle;
- eventData->camera = camera;
- eventData->errorCallback = errorCallback;
- eventData->userData = userData;
- eventData->successCallback = successCallback;
- eventData->filename = filename;
- eventData->highRes = highRes;
- eventData->pending_operation_cb = pendingOperationCb;
-
- CONTROLLER_POST_EVENT(
- PluginApiController,
- PluginApiControllerEvents::CaptureImageEvent(eventData));
-
- LogDebug("API camera capture end");
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-int plugin_api_camera_start_video_capture(
- widget_handle_t widgetHandle,
- camera_object camera,
- const char* filename,
- int highRes,
- camera_capture_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation pendingOperationCb,
- void* userData)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogDebug("API start video");
-
- PluginApiControllerEventsTypes::CameraCaptureImageEventDataPtr
- eventData(new PluginApiControllerEventsTypes::
- PluginCameraCaptureImageEventData);
-
- eventData->widgetHandle = widgetHandle;
- eventData->camera = camera;
- eventData->errorCallback = errorCallback;
- eventData->userData = userData;
- eventData->successCallback = successCallback;
- eventData->filename = filename;
- eventData->highRes = highRes;
- eventData->pending_operation_cb = pendingOperationCb;
-
- CONTROLLER_POST_EVENT(
- PluginApiController,
- PluginApiControllerEvents::StartVideoCaptureEvent(eventData));
-
- LogDebug("API start video end");
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-int plugin_api_camera_stop_video_capture(widget_handle_t /*widgetHandle*/,
- camera_object camera)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogDebug("API stop video");
-
- PluginApiControllerEventsTypes::CameraBaseEventDataPtr eventData(
- new PluginApiControllerEventsTypes::PluginCameraBaseEventData);
-
- eventData->camera = camera;
-
- CONTROLLER_POST_EVENT(
- PluginApiController,
- PluginApiControllerEvents::StopVideoCaptureEvent(eventData));
-
- LogDebug("API stop video end");
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
-
-int plugin_api_camera_cancel_async_operation(widget_handle_t /*widgetHandle*/,
- camera_object camera,
- camera_operation operation)
-{
- UNHANDLED_EXCEPTION_HANDLER_BEGIN
- {
- LogDebug("API cancel");
-
- PluginApiControllerEventsTypes::CameraBaseEventDataPtr eventData(
- new PluginApiControllerEventsTypes::PluginCameraBaseEventData);
- eventData->camera = camera;
- eventData->pending_operation = operation;
-
- CONTROLLER_POST_EVENT(
- PluginApiController,
- PluginApiControllerEvents::CancelOperationsEvent(eventData));
-
- return 0;
- }
- UNHANDLED_EXCEPTION_HANDLER_END
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_plugin_api.h
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file contains declarations of wrt plugin api
- */
-/*
- * @defgroup wrt_engine_group WebRunTime engine Library
- * @ingroup internet_FW
- * Functions to APIs to access widget property
- */
-#ifndef WRT_PLUGIN_API_H
-#define WRT_PLUGIN_API_H
-
-#include <JavaScriptCore/JSObjectRef.h>
-#include <wrt_plugin_export.h>
-
-extern const engine_interface_t DEFAULT_ENGINE_INTERFACE;
-
-int plugin_api_camera_start_preview(JSContextRef context, JSValueRef sink);
-
-int plugin_api_check_access_2(const ace_request_2_t *ace_request);
-
-void plugin_api_camera_free_webkit_cameras(webkit_cameras_array* cameras);
-
-webkit_cameras_array* plugin_api_camera_get_cameras(
- widget_handle_t widgetHandle);
-
-int plugin_api_camera_remove_camera(widget_handle_t widgetHandle,
- camera_object camera);
-
-int plugin_api_camera_create_preview_node(
- widget_handle_t widgetHandle,
- camera_object camera,
- camera_preview_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation pendingOpearationCb,
- void* userData);
-
-int plugin_api_camera_capture_image(
- widget_handle_t widgetHandle,
- camera_object camera,
- const char* filename,
- int highRes,
- camera_capture_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation pendingOpearationCb,
- void* userData);
-
-int plugin_api_camera_start_video_capture(
- widget_handle_t widgetHandle,
- camera_object camera,
- const char* filename,
- int highRes,
- camera_capture_success_cb successCallback,
- camera_error_cb errorCallback,
- camera_set_pending_operation pendingOpearationCb,
- void* userData);
-
-int plugin_api_camera_stop_video_capture(widget_handle_t widgetHandle,
- camera_object camera);
-
-int plugin_api_camera_cancel_async_operation(widget_handle_t widgetHandle,
- camera_object camera,
- camera_operation operation);
-
-#endif /* WRT_PLUGIN_API_H */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_api_controller.cpp
- * @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
- * @version 1.0
- * @bref implementation file for plugin controller
- */
-
-#include "plugin_api_controller.h"
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-#include <dpl/singleton_impl.h>
-
-IMPLEMENT_SINGLETON(PluginApiController)
-
-PluginApiController::PluginApiController()
-{
-}
-
-void PluginApiController::OnEventReceived(
- const PluginApiControllerEvents::GetCamerasEvent& event)
-{
- m_pluginApiLogic.getCameras(event.GetArg0());
-}
-
-void PluginApiController::OnEventReceived(
- const PluginApiControllerEvents::CreatePreviewEvent& event)
-{
- m_pluginApiLogic.createPreview(event.GetArg0());
-}
-
-void PluginApiController::OnEventReceived(
- const PluginApiControllerEvents::StartVideoCaptureEvent& event)
-{
- m_pluginApiLogic.startVideoCapture(event.GetArg0());
-}
-
-void PluginApiController::OnEventReceived(
- const PluginApiControllerEvents::StopVideoCaptureEvent& event)
-{
- m_pluginApiLogic.stopVideoCapture(event.GetArg0());
-}
-
-void PluginApiController::OnEventReceived(
- const PluginApiControllerEvents::CaptureImageEvent& event)
-{
- m_pluginApiLogic.captureImage(event.GetArg0());
-}
-
-void PluginApiController::OnEventReceived(
- const PluginApiControllerEvents::RemoveCameraEvent& event)
-{
- m_pluginApiLogic.removeCamera(event.GetArg0());
-}
-
-void PluginApiController::OnEventReceived(
- const PluginApiControllerEvents::CancelOperationsEvent& event)
-{
- m_pluginApiLogic.cancelOperations(event.GetArg0());
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_api_controller.h
- * @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
- * @version 1.0
- * @bref Header file for plugin controller
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_PLUGIN_API_CONTROLLER_H_
-#define WRT_SRC_PLUGIN_SERVICE_PLUGIN_API_CONTROLLER_H_
-
-#include <dpl/singleton.h>
-#include <dpl/event/controller.h>
-#include <dpl/event/event_listener.h>
-#include <dpl/generic_event.h>
-#include <dpl/exception.h>
-#include <dpl/shared_ptr.h>
-#include <dpl/noncopyable.h>
-#include <dpl/log/log.h>
-#include <plugin_api_logic.h>
-#include <wrt_plugin_export.h>
-#include "plugin_api_controller_data_types.h"
-
-namespace PluginApiControllerEvents {
-
-//camera events
-DECLARE_GENERIC_EVENT_1(CreatePreviewEvent,
- PluginApiControllerEventsTypes::CameraCreatePreviewEventDataPtr)
-DECLARE_GENERIC_EVENT_1(StartVideoCaptureEvent,
- PluginApiControllerEventsTypes::CameraCaptureImageEventDataPtr)
-DECLARE_GENERIC_EVENT_1(StopVideoCaptureEvent,
- PluginApiControllerEventsTypes::CameraBaseEventDataPtr)
-DECLARE_GENERIC_EVENT_1(CaptureImageEvent,
- PluginApiControllerEventsTypes::CameraCaptureImageEventDataPtr)
-DECLARE_GENERIC_EVENT_1(RemoveCameraEvent,
- PluginApiControllerEventsTypes::CameraBaseEventDataPtr)
-DECLARE_GENERIC_EVENT_1(GetCamerasEvent,
- PluginApiControllerEventsTypes::CameraGetCamerasEventDataPtr)
-DECLARE_GENERIC_EVENT_1(CancelOperationsEvent,
- PluginApiControllerEventsTypes::CameraBaseEventDataPtr)
-
-}//namespace PluginControllerEvents
-
-
-typedef DPL::TypeListDecl<
- PluginApiControllerEvents::CreatePreviewEvent,
- PluginApiControllerEvents::StartVideoCaptureEvent,
- PluginApiControllerEvents::StopVideoCaptureEvent,
- PluginApiControllerEvents::CaptureImageEvent,
- PluginApiControllerEvents::RemoveCameraEvent,
- PluginApiControllerEvents::GetCamerasEvent,
- PluginApiControllerEvents::CancelOperationsEvent
- >::Type
- PluginApiControllerEventTypeList;
-
-
-class PluginApiController :
- public DPL::Event::Controller<PluginApiControllerEventTypeList>
-{
- protected:
- virtual void OnEventReceived(const PluginApiControllerEvents::
- CreatePreviewEvent& event);
- virtual void OnEventReceived(const PluginApiControllerEvents::
- StartVideoCaptureEvent& event);
- virtual void OnEventReceived(const PluginApiControllerEvents::
- StopVideoCaptureEvent& event);
- virtual void OnEventReceived(const PluginApiControllerEvents::
- CaptureImageEvent& event);
- virtual void OnEventReceived(const PluginApiControllerEvents::
- RemoveCameraEvent& event);
- virtual void OnEventReceived(const PluginApiControllerEvents::
- GetCamerasEvent& event);
- virtual void OnEventReceived(const PluginApiControllerEvents::
- CancelOperationsEvent& event);
-
- PluginApiController();
-
- private:
- PluginApiLogic m_pluginApiLogic;
-
- friend class DPL::Singleton<PluginApiController>;
-};
-
-
-typedef DPL::Singleton<PluginApiController> PluginApiControllerSingleton;
-
-
-#endif //WRT_SRC_PLUGIN_SERVICE_PLUGIN_CONTROLLER_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_api_controller_data_types.h
- * @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
- * @version 1.0
- * @bref Header file for plugin controller event data types
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_PLUGIN_API_CONTROLLER_DATA_TYPES_H_
-#define WRT_SRC_PLUGIN_SERVICE_PLUGIN_API_CONTROLLER_DATA_TYPES_H_
-
-#include <dpl/shared_ptr.h>
-#include <string>
-#include "wrt_plugin_export.h"
-
-namespace PluginApiControllerEventsTypes {
-
-struct PluginCameraBaseEventData
-{
- PluginCameraBaseEventData() : camera(NULL), pending_operation(-1) {}
-
- camera_object camera;
- camera_operation pending_operation;
-};
-typedef DPL::SharedPtr<PluginCameraBaseEventData> CameraBaseEventDataPtr;
-
-
-struct PluginCameraEventData : public PluginCameraBaseEventData
-{
- PluginCameraEventData() :
- widgetHandle(-1),
- errorCallback(NULL),
- userData(NULL),
- pending_operation_cb(NULL)
- {
- }
-
- widget_handle_t widgetHandle;
- camera_error_cb errorCallback;
- void* userData;
- camera_set_pending_operation pending_operation_cb;
-};
-
-
-struct PluginCameraCreatePreviewEventData : public PluginCameraEventData
-{
- PluginCameraCreatePreviewEventData() : successCallback(NULL) {}
-
- camera_preview_success_cb successCallback;
-};
-typedef DPL::SharedPtr<PluginCameraCreatePreviewEventData>
- CameraCreatePreviewEventDataPtr;
-
-
-struct PluginCameraCaptureImageEventData : public PluginCameraEventData
-{
- PluginCameraCaptureImageEventData() :
- successCallback(NULL),
- highRes(0)
- {
- }
-
- camera_capture_success_cb successCallback;
- std::string filename;
- int highRes;
-};
-typedef DPL::SharedPtr<PluginCameraCaptureImageEventData>
- CameraCaptureImageEventDataPtr;
-
-
-struct PluginCameraGetCamerasDataEvent
-{
- PluginCameraGetCamerasDataEvent() : widgetHandle(-1), cameras(NULL) {}
-
- widget_handle_t widgetHandle;
- webkit_cameras_array* cameras;
-};
-typedef DPL::SharedPtr<PluginCameraGetCamerasDataEvent>
- CameraGetCamerasEventDataPtr;
-
-}
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file plugin_api_logic.cpp
- * @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
- * @version 1.0
- * @bref implementation file for plugin api logic
- */
-
-#include "plugin_api_logic.h"
-#include <view_logic.h>
-#include <dpl/assert.h>
-#include <dpl/log/log.h>
-
-void PluginApiLogic::getCameras(const GetCamerasDataPtr& data) const
-{
- LogDebug("Get cameras");
-
- Assert(data->cameras);
-
- CameraArray webkit_array;
- if (!ewk_view_camera_get_cameras(&webkit_array)) {
- LogError("get cameras returned false");
- data->cameras->size = 0;
- data->cameras->webkit_cameras = NULL;
- return;
- }
-
- LogDebug("Cameras count : " << webkit_array.length);
-
- data->cameras->size = webkit_array.length;
- data->cameras->webkit_cameras = new webkit_camera[webkit_array.length];
-
- for (unsigned int i = 0; i < webkit_array.length; ++i) {
- data->cameras->webkit_cameras[i].camera = webkit_array.camera[i];
- int type = ewk_view_camera_get_device_index(webkit_array.camera[i]);
- switch (type) {
- case 0:
- data->cameras->webkit_cameras[i].type = CAMERA_TYPE_FRONT;
- break;
- case 1:
- data->cameras->webkit_cameras[i].type = CAMERA_TYPE_REAR;
- break;
- default:
- LogError("Invalid camera type");
- data->cameras->webkit_cameras[i].type = CAMERA_TYPE_UNKNOWN;
- }
- }
-
- LogDebug("Get cameras completed");
-}
-
-void PluginApiLogic::cancelOperations(const BaseDataPtr& data) const
-{
- LogDebug("Cancel before webkit");
- ewk_view_camera_cancel(data->camera, data->pending_operation);
- LogDebug("Cancel completed");
-}
-
-void PluginApiLogic::createPreview(const CreatePreviewDataPtr& data) const
-{
- LogDebug("create preview start");
-
- EvasObject evas = ViewLogicSingleton::Instance().getViewForHandle(
- data->widgetHandle);
-
- if (!evas.IsValid()) {
- LogError("The view for handle is null");
- //TODO Throw exception
- return;
- }
-
- LogDebug("create preview before webkit");
- Camera_Operation result = ewk_view_camera_create_preview_node(
- data->camera,
- evas,
- reinterpret_cast<CameraPreviewSuccessCb>(data->successCallback),
- data->errorCallback,
- data->userData);
- data->pending_operation_cb(result,data->userData);
-
- LogDebug("create preview end");
-}
-
-void PluginApiLogic::startVideoCapture(const CaptureImageDataPtr& data) const
-{
- LogDebug("start video");
-
- LogDebug("start video before webkit");
- Camera_Operation result = ewk_view_camera_start_video_capture(
- data->camera,
- data->filename.c_str(),
- data->highRes,
- data->successCallback,
- data->errorCallback,
- data->userData);
-
- data->pending_operation_cb(result,data->userData);
- LogDebug("start video end");
-}
-
-void PluginApiLogic::stopVideoCapture(const BaseDataPtr& data) const
-{
- LogDebug("stop video");
-
- ewk_view_camera_stop_video_capture(data->camera);
-
- LogDebug("stop video end");
-}
-
-void PluginApiLogic::captureImage(const CaptureImageDataPtr& data) const
-{
- LogDebug("capture image before webkit");
- Camera_Operation result = ewk_view_camera_capture_image(
- data->camera,
- data->filename.c_str(),
- data->highRes,
- data->successCallback,
- data->errorCallback,
- data->userData);
-
- data->pending_operation_cb(result,data->userData);
-
- LogDebug("capture image end");
-}
-
-void PluginApiLogic::removeCamera(const BaseDataPtr& data) const
-{
- LogDebug("remove camera");
-
- ewk_view_camera_remove_camera(data->camera);
-
- LogDebug("remove camera end");
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file plugin_api_logic.h
- * @author Grzegorz Krawczyk (g.krawczyk@samsung.com)
- * @version 1.0
- * @bref Header file for plugin api logic
- */
-
-#ifndef WRT_SRC_PLUGIN_SERVICE_PLUGIN_API_LOGIC_H_
-#define WRT_SRC_PLUGIN_SERVICE_PLUGIN_API_LOGIC_H_
-
-#include <ewk_view.h>
-#include <wrt_plugin_export.h>
-//#include "plugin_api_controller.h"
-#include "plugin_api_controller_data_types.h"
-class PluginApiLogic
-{
- public:
- typedef PluginApiControllerEventsTypes::CameraCreatePreviewEventDataPtr
- CreatePreviewDataPtr;
- typedef PluginApiControllerEventsTypes::CameraCaptureImageEventDataPtr
- CaptureImageDataPtr;
- typedef PluginApiControllerEventsTypes::CameraBaseEventDataPtr
- BaseDataPtr;
- typedef PluginApiControllerEventsTypes::CameraGetCamerasEventDataPtr
- GetCamerasDataPtr;
-
- public:
-
- void createPreview(const CreatePreviewDataPtr& data) const;
-
- void startVideoCapture(const CaptureImageDataPtr& data) const;
-
- void stopVideoCapture(const BaseDataPtr& data) const;
-
- void captureImage(const CaptureImageDataPtr& data) const;
-
- void removeCamera(const BaseDataPtr& camera) const;
-
- void cancelOperations(const BaseDataPtr& camera) const;
-
- void getCameras(const GetCamerasDataPtr& data) const;
-
- private:
- PluginApiLogic(){};
-
- friend class PluginApiController;
-};
-
-#endif
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-SET(TARGET_WRT_POPUP "wrt-popup")
-
-PKG_CHECK_MODULES(WRT_POPUP_DEPS
- dpl-efl
- dpl-event-efl
- dpl-popup-efl
- dpl-ace-dao-ro
- REQUIRED
-)
-
-INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${WRT_POPUP_DEPS_INCLUDE_DIRS}
-)
-
-SET(WRT_POPUP_SRCS
- wrt-popup.cpp
- PopupSerializer.cpp
- YesNoPopup.cpp
- ${WRT_SRC_DIR}/domain/efl/CommunicationBox.cpp
-)
-
-ADD_EXECUTABLE(${TARGET_WRT_POPUP}
- ${WRT_POPUP_SRCS}
-)
-
-TARGET_LINK_LIBRARIES(${TARGET_WRT_POPUP}
- ${WRT_POPUP_DEPS_LIBRARIES}
-)
-
-SET_TARGET_PROPERTIES(${TARGET_WRT_POPUP} PROPERTIES
- LINK_FLAGS "-Wl,--as-needed -Wl,--hash-style=both -Wl,--version-script=${PROJECT_SOURCE_DIR}/wrt-engine.map"
- BUILD_WITH_INSTALL_RPATH ON
- INSTALL_RPATH_USE_LINK_PATH ON
-)
-
-INSTALL(TARGETS ${TARGET_WRT_POPUP} DESTINATION bin)
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WRT_POPUP_ENUM_H
-#define WRT_POPUP_ENUM_H
-
-enum PopupType {
- ACE_PROMPT = 1,
- YES_NO_PROMPT
-};
-
-#endif
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "PopupInvoker.h"
-#include <sstream>
-#include <unistd.h>
-#include <stdio.h>
-#include <dpl/log/log.h>
-#include <dpl/waitable_handle.h>
-#include <dpl/binary_queue.h>
-#include <dpl/serialization.h>
-#include <unistd.h>
-#include <stdlib.h>
-#include "PopupEnum.h"
-#include "PopupSerializer.h"
-
-
-namespace {
-const char *POPUP_EXEC = "/usr/bin/wrt-popup";
-}
-
-PopupInvoker::PopupInvoker() :
- m_inputName(tmpnam(NULL)),
- m_outputName(tmpnam(NULL))
-{
- Try
- {
- m_input.Create(m_inputName);
- m_output.Create(m_outputName);
- LogDebug("Pipes created");
- }
- Catch (DPL::Exception)
- {
- LogError("Cannot create pipes");
- }
-}
-
-PopupInvoker::~PopupInvoker()
-{
- Try
- {
- m_input.Destroy(m_inputName);
- m_output.Destroy(m_outputName);
- LogDebug("Pipes destroyed");
- }
- Catch (DPL::Exception)
- {
- LogError("Cannot destroy pipes");
- }
-}
-
-Prompt::PromptAnswer
- PopupInvoker::showSyncPopup(int popupType, const std::string &resource)
-{
- Try
- {
- DPL::BinaryQueue data;
- PopupSerializer::appendArg(ACE_PROMPT, data);
- PopupSerializer::appendArg(popupType, data);
- PopupSerializer::appendArg(resource, data);
- DPL::NamedInputPipe tmp;
- tmp.Open(m_outputName);
- m_output.Open(m_outputName);
- m_input.Open(m_inputName);
- m_output.Write(data, data.Size());
-
- executePopup();
-
- //Result from popup application is available. Read it.
- DPL::BinaryQueueAutoPtr resultData =
- m_input.Read(std::numeric_limits<std::size_t>::max());
- const int result = PopupSerializer::getIntArg(*resultData);
- const int validity = PopupSerializer::getIntArg(*resultData);
-
- Assert(resultData->Empty());
-
- tmp.Close();
- m_input.Close();
- m_output.Close();
-
- return Prompt::PromptAnswer(result,
- static_cast<Prompt::Validity>(validity));
- }
- Catch(DPL::Exception)
- {
- LogError("error occured");
- }
- // if error then return deny once
- return Prompt::PromptAnswer(false, Prompt::Validity::ONCE);
-}
-
-bool PopupInvoker::askYesNo(const std::string& title, const std::string& message)
-{
- Try
- {
- DPL::BinaryQueue data;
- PopupSerializer::appendArg(YES_NO_PROMPT, data);
- PopupSerializer::appendArg(title, data);
- PopupSerializer::appendArg(message, data);
- DPL::NamedInputPipe tmp;
- tmp.Open(m_outputName);
- m_output.Open(m_outputName);
- m_input.Open(m_inputName);
- m_output.Write(data, data.Size());
-
- executePopup();
-
- //Result from popup application is available. Read it.
- DPL::BinaryQueueAutoPtr resultData =
- m_input.Read(std::numeric_limits<std::size_t>::max());
- const int result = PopupSerializer::getIntArg(*resultData);
-
- LogDebug("Popup result is: " << result);
-
- Assert(resultData->Empty());
-
- tmp.Close();
- m_input.Close();
- m_output.Close();
-
- return (!!result);
- }
- Catch(DPL::Exception)
- {
- LogError("error occured");
- }
-
- return false;
-}
-
-void PopupInvoker::executePopup()
-{
- pid_t pid = fork();
- if (pid == -1)
- {
- //error occured
- LogError("Cannot display popup!");
- Assert(false);
- }
- if (pid == 0)
- {
- //child process
- int ret = execl(POPUP_EXEC,
- POPUP_EXEC,
- m_outputName.c_str(),
- m_inputName.c_str(),
- NULL);
- if (ret == -1) {
- //execl returns -1 on error
- LogError("Cannot display popup!");
- Assert(false);
- }
- }
-
- DPL::WaitableHandle handle = m_input.WaitableReadHandle();
- DPL::WaitForSingleHandle(handle);
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WRT_POPUP_INVOKER_H
-#define WRT_POPUP_INVOKER_H
-
-#include <dpl/ace-dao-ro/PromptModel.h>
-
-#include <string>
-#include <dpl/named_input_pipe.h>
-#include <dpl/named_output_pipe.h>
-
-/*
-
- Example usage:
-
- bool result = PopupInvoker().askYesNo("title", "message");
-
- */
-
-class PopupInvoker
-{
-public:
- PopupInvoker();
- ~PopupInvoker();
-
- Prompt::PromptAnswer showSyncPopup(int popupType,
- const std::string &resource);
-
- bool askYesNo(const std::string &title, const std::string &message);
-
-private:
-
- void executePopup();
-
- DPL::NamedInputPipe m_input;
- DPL::NamedOutputPipe m_output;
- const std::string m_inputName;
- const std::string m_outputName;
-};
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "PopupSerializer.h"
-#include <dpl/scoped_array.h>
-
-namespace PopupSerializer {
-
-void appendArg(int arg, DPL::BinaryQueue &buffer)
-{
- size_t argSize = sizeof(arg);
- buffer.AppendCopy(&argSize, sizeof(argSize));
- buffer.AppendCopy(&arg, sizeof(arg));
-}
-
-void appendArg(const std::string &arg, DPL::BinaryQueue &buffer)
-{
- size_t argSize = arg.size();
- buffer.AppendCopy(&argSize, sizeof(argSize));
- buffer.AppendCopy(arg.c_str(), argSize);
-}
-
-int getIntArg(DPL::BinaryQueue &buffer)
-{
- int result;
- size_t argSize;
- buffer.FlattenConsume(&argSize, sizeof(argSize));
- buffer.FlattenConsume(&result, argSize);
- //TODO: what if argSize != sizeof(int)
- //This should not be problem if this is run on the same machine.
- return result;
-}
-
-std::string getStringArg(DPL::BinaryQueue &buffer)
-{
- std::string::size_type size;
- buffer.FlattenConsume(&size, sizeof(size));
- DPL::ScopedArray<char> str(new char[size]);
- buffer.FlattenConsume(str.Get(), size);
- return std::string(str.Get(), str.Get() + size);
-}
-
-}
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WRT_POPUP_SERIALIZER_H
-#define WRT_POPUP_SERIALIZER_H
-
-#include <string>
-#include <dpl/binary_queue.h>
-
-namespace PopupSerializer {
-
-void appendArg(int arg, DPL::BinaryQueue &buffer);
-void appendArg(const std::string &arg, DPL::BinaryQueue &buffer);
-
-int getIntArg(DPL::BinaryQueue &buffer);
-std::string getStringArg(DPL::BinaryQueue &buffer);
-
-}
-
-#endif
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file YesNoPopup.cpp
- * @author Andrzej Surdej (a.surdej@samsung.com)
- * @version 1.0
- * @brief Popup that contains 'Yes' and 'No' buttons. Inplementation
- */
-
-#include "YesNoPopup.h"
-#include <memory>
-#include <string.h>
-#include <dpl/popup/popup_manager.h>
-#include "PopupSerializer.h"
-
-namespace {
-const char YES_LABEL[] = "Yes";
-const char NO_LABEL[] = "No";
-const int POPUP_YES_VALUE = 1;
-const int POPUP_NO_VALUE = 2;
-} //anonymous
-
-namespace PopupProcess {
-using namespace DPL::Popup;
-
-void YesNoPopup::show(DPL::BinaryQueueAutoPtr data, WrtPopup* parent)
-{
- LogDebug("Entered");
- std::string title = PopupSerializer::getStringArg(*data);
- std::string message = PopupSerializer::getStringArg(*data);
- Assert(data->Empty());
- LogDebug("title: " << title << " message: " << message);
-
- m_parent = parent;
-
- CtrlPopupPtr popup = PopupControllerSingleton::Instance().CreatePopup();
-
- popup->SetTitle(title);
- popup->Append(new PopupObject::Label(message));
-
- popup->Append(new PopupObject::Button(YES_LABEL, POPUP_YES_VALUE));
- popup->Append(new PopupObject::Button(NO_LABEL, POPUP_NO_VALUE));
-
- ListenForAnswer(popup);
-
- //nested loop is not used here
- ShowPopupEvent event(popup,
- MakeAnswerCallback(
- this,
- &YesNoPopup::responseCallback),
- DPL::Event::UNDEFINED_LOOP_HANDLE);
-
- CONTROLLER_POST_EVENT(PopupController,
- event);
-
- LogDebug("Exited");
- return;
-}
-
-void YesNoPopup::responseCallback(const DPL::Popup::AnswerCallbackData &answer)
-{
- bool result = (POPUP_YES_VALUE == answer.buttonAnswer);
- DPL::BinaryQueue retValue;
- PopupSerializer::appendArg(result, retValue);
- m_parent->response(retValue);
-}
-
-} // PopupProcess
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file YesNoPopup.h
- * @author Andrzej Surdej (a.surdej@samsung.com)
- * @version 1.0
- * @brief Popup that contains 'Yes' and 'No' buttons
- */
-
-#ifndef WRT_YES_NO_POPUP_H
-#define WRT_YES_NO_POPUP_H
-
-#include "wrt-popup.h"
-
-namespace PopupProcess {
-
-class YesNoPopup : public IPopup
-{
-public:
- virtual void show(DPL::BinaryQueueAutoPtr data, WrtPopup* parent);
-
-private:
-
- void responseCallback(const DPL::Popup::AnswerCallbackData &answer);
- WrtPopup* m_parent;
-};
-
-} // PopupProcess
-
-#endif /* WRT_YES_NO_POPUP_H */
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "wrt-popup.h"
-#include <limits>
-#include <memory>
-
-#include <aul.h>
-#include <dpl/log/log.h>
-#include <dpl/exception.h>
-#include <dpl/assert.h>
-
-#include "PopupEnum.h"
-#include "PopupSerializer.h"
-#include "YesNoPopup.h"
-
-#include <CommunicationBox.h>
-#include <dpl/ace-dao-ro/PromptModel.h>
-#include <dpl/ace/PolicyEffect.h>
-
-namespace {
-struct PopupsUserdata
-{
- PopupsUserdata(CommunicationBox* pCommunicationBox) :
- communicationBox(pCommunicationBox)
- {
- }
- std::unique_ptr<CommunicationBox> communicationBox;
- Prompt::PromptLabelsPtr promptLabels;
-};
-
-Prompt::PromptLabels* getPromptLabelsFromPolicyEffect(
- const PolicyEffect promptEffect, const std::string& resource)
-{
- switch(promptEffect) {
- case PolicyEffect::PROMPT_ONESHOT: {
- return Prompt::PromptModel::getOneShotModel(resource);
- }
- case PolicyEffect::PROMPT_SESSION: {
- return Prompt::PromptModel::getSessionModel(resource);
- }
- case PolicyEffect::PROMPT_BLANKET: {
- return Prompt::PromptModel::getBlanketModel(resource);
- }
- default:
- LogError("Policy Effect not an prompt");
- Assert(0);
- return NULL;
- }
-}
-
-} // namespace anonymous
-
-namespace PopupProcess {
-
-bool WrtPopup::openPipes()
-{
- Try
- {
- if (m_argc != 3) {
- LogError("Wrong arguments!");
- return false;
- }
- m_input.Open(m_argv[1]);
- //open output pipe
- m_output.Open(m_argv[2]);
-
- DPL::WaitableHandleWatchSupport::InheritedContext()->
- AddWaitableHandleWatch(this,
- m_input.WaitableReadHandle(),
- DPL::WaitMode::Read);
- m_pipesOpened = true;
- return true;
- }
- Catch(DPL::Exception)
- {
- LogError("cannot open pipes");
- }
- return false;
-}
-
-void WrtPopup::closePipes()
-{
- Try
- {
- if (m_pipesOpened)
- {
- DPL::WaitableHandleWatchSupport::InheritedContext()->
- RemoveWaitableHandleWatch(this,
- m_input.WaitableReadHandle(),
- DPL::WaitMode::Read);
- m_input.Close();
- m_output.Close();
- m_pipesOpened = false;
- }
- }
- Catch(DPL::Exception)
- {
- LogError("cannot close pipes");
- }
-}
-
-void WrtPopup::OnEventReceived(const QuitEvent &/* event */)
-{
- LogDebug("Quiting");
- closePipes();
- Quit();
-}
-
-void WrtPopup::OnWaitableHandleEvent(DPL::WaitableHandle waitableHandle,
- DPL::WaitMode::Type /*mode*/)
-{
- if (waitableHandle == m_input.WaitableReadHandle())
- {
- readInputData();
- }
-}
-
-void WrtPopup::readInputData()
-{
- DPL::BinaryQueueAutoPtr data =
- m_input.Read(std::numeric_limits<std::size_t>::max());
- int popupType = PopupSerializer::getIntArg(*data);
- LogDebug("popup type " << popupType);
- switch(popupType) {
- case ACE_PROMPT:
- // TODO: fix this to use IPopup interface
- showAcePrompt(data);
- break;
- case YES_NO_PROMPT: {
- m_popup.reset(new YesNoPopup());
- m_popup->show(data, this);
- break; }
- default:
- Assert(false);
- }
-}
-
-void WrtPopup::showAcePrompt(DPL::BinaryQueueAutoPtr data)
-{
- int promptType = PopupSerializer::getIntArg(*data);
- std::string resource = PopupSerializer::getStringArg(*data);
- Assert(data->Empty());
- LogDebug("PopupType: " << promptType << " resource: " << resource);
-
- PopupsUserdata* popupsUserdata =
- new PopupsUserdata(new CommunicationBox());
-
- using namespace Prompt;
- popupsUserdata->promptLabels.reset(
- getPromptLabelsFromPolicyEffect(static_cast<PolicyEffect>(promptType),
- resource));
- popupsUserdata->communicationBox->showAsync(
- static_cast<PromptModel::PromptType>(
- popupsUserdata->promptLabels->getPromptType()),
- popupsUserdata->promptLabels->getMainLabel(),
- popupsUserdata->promptLabels->getButtonLabels(),
- popupsUserdata->promptLabels->getCheckLabel(),
- CommunicationBox::ResponseDelegate(
- this,
- &WrtPopup::communicationBoxResponse),
- popupsUserdata);
-}
-
-void WrtPopup::communicationBoxResponse(int buttonAnswer,
- bool checkState,
- void* userdata)
-{
- LogDebug("Communication box response");
- Assert(userdata);
- std::unique_ptr<PopupsUserdata> popupsUserdata(
- static_cast<PopupsUserdata*>(userdata));
- //following code can be moved to different place, but this is only a stub
-
- Prompt::PromptAnswer promptAnswer(
- popupsUserdata->promptLabels->getPromptType(),
- buttonAnswer, checkState);
-
- const bool allowed = promptAnswer.isAccessAllowed();
- const Prompt::Validity validity = promptAnswer.getValidity();
-
- DPL::BinaryQueue result;
- PopupSerializer::appendArg(allowed, result);
- PopupSerializer::appendArg(static_cast<int>(validity), result);
- m_output.Write(result, result.Size());
- PostEvent(QuitEvent());
-}
-
-void WrtPopup::response(DPL::BinaryQueue result)
-{
- m_output.Write(result, result.Size());
- PostEvent(QuitEvent());
-}
-
-void WrtPopup::OnStop()
-{
- LogInfo("On Stop");
-}
-
-void WrtPopup::OnCreate()
-{
- if (!openPipes())
- {
- PostEvent(QuitEvent());
- }
- LogInfo("On Create");
-}
-
-void WrtPopup::OnResume()
-{
- LogDebug("OnResume");
-}
-
-void WrtPopup::OnPause()
-{
- LogDebug("OnPause");
-}
-
-void WrtPopup::OnReset(bundle */*b*/)
-{
- LogDebug("OnReset");
-}
-
-void WrtPopup::OnTerminate()
-{
- LogDebug("Wrt Shutdown now");
-}
-
-WrtPopup::WrtPopup(int argc, char **argv) :
- Application(argc, argv, "wrt-popup", false),
- m_pipesOpened(false),
- m_popup(NULL)
-{
- Touch();
- DPL::Popup::PopupControllerSingleton::Instance().Touch();
- DPL::Popup::PopupManagerSingleton::Instance().Initialize(
- DPL::Popup::PopupRendererPtr(new DPL::Popup::PopupRenderer));
- LogDebug("App Created");
-}
-
-WrtPopup::~WrtPopup()
-{
- DPL::Popup::PopupManagerSingleton::Instance().Deinitialize();
- LogDebug("App Finished");
-}
-
-} // PopupProcess
-
-int main(int argc, char *argv[])
-{
- // Output on stdout will be flushed after every newline character,
- // even if it is redirected to a pipe. This is useful for running
- // from a script and parsing output.
- // (Standard behavior of stdlib is to use full buffering when
- // redirected to a pipe, which means even after an end of line
- // the output may not be flushed).
- setlinebuf(stdout);
- DPL::Log::LogSystemSingleton::Instance().SetTag("WRT-POPUP");
- PopupProcess::WrtPopup app(argc, argv);
- int ret = app.Exec();
- LogDebug("App returned: " << ret);
- return ret;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WRT_POPUP_H
-#define WRT_POPUP_H
-
-#include <memory>
-#include <dpl/application.h>
-#include <dpl/generic_event.h>
-#include <dpl/event/controller.h>
-#include <dpl/type_list.h>
-#include <dpl/named_input_pipe.h>
-#include <dpl/named_output_pipe.h>
-#include <dpl/waitable_handle_watch_support.h>
-#include <dpl/binary_queue.h>
-#include <dpl/popup/popup_controller.h>
-
-namespace PopupProcess {
-
-DECLARE_GENERIC_EVENT_0(QuitEvent)
-class WrtPopup;
-
-class IPopup : public DPL::Popup::PopupControllerUser
-{
-public:
- virtual void show(DPL::BinaryQueueAutoPtr data, WrtPopup* parent) = 0;
-};
-
-typedef std::unique_ptr<IPopup> IPopupPtr;
-
-
-class WrtPopup :
- public DPL::WaitableHandleWatchSupport::WaitableHandleListener,
- public DPL::Application,
- private DPL::Event::Controller<DPL::TypeListDecl<QuitEvent>::Type>
-{
-public:
- WrtPopup(int argc, char **argv);
- virtual ~WrtPopup();
-
- void response(DPL::BinaryQueue result);
-
-protected:
- //DPL::Application functions
- virtual void OnStop();
- virtual void OnCreate();
- virtual void OnResume();
- virtual void OnPause();
- virtual void OnReset(bundle *b);
- virtual void OnTerminate();
- virtual void OnEventReceived(const QuitEvent &event);
- virtual void OnWaitableHandleEvent(DPL::WaitableHandle waitableHandle,
- DPL::WaitMode::Type mode);
-private:
-
- void showAcePrompt(DPL::BinaryQueueAutoPtr data);
- void communicationBoxResponse(int buttonAnswer,
- bool checkState,
- void* userdata);
- bool m_pipesOpened;
- IPopupPtr m_popup;
-
- bool openPipes();
- void closePipes();
- void readInputData();
-
- DPL::NamedInputPipe m_input;
- DPL::NamedOutputPipe m_output;
-};
-
-} // PopupProcess
-
-#endif // WRT_POPUP_H
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-SRC=./src
-BUILD=build
-mkdir $BUILD 2>/dev/null
-g++ $SRC/test_empty.cpp -o $BUILD/empty
-g++ $SRC/test_timer.cpp -o $BUILD/timer
-g++ $SRC/test_openssl.cpp `pkg-config --libs openssl` -o $BUILD/ssl
-g++ $SRC/test_pcre.cpp `pkg-config --libs libpcre` -o $BUILD/pcre
-g++ $SRC/test_xml2.cpp `pkg-config --cflags libxml-2.0` `pkg-config --libs libxml-2.0` -o $BUILD/xml
-g++ $SRC/test_xmlsec.cpp `pkg-config --cflags xmlsec1` `pkg-config --libs xmlsec1` -o $BUILD/xmlsec
+++ /dev/null
-#!/bin/bash -
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-set -o nounset # Treat unset variables as an error
-
-CLEAR_CACHE_ENABLE=0
-
-
-function runTest(){
-echo -e "\nTesting..." $2
-
-if [ $CLEAR_CACHE_ENABLE -eq 1 ]; then
-#Clear cache
-/sbin/sysctl vm.drop_caches=3;
-fi
-
-START=$(date +%s.%N)
-$1
-END=$(date +%s.%N)
-DIFF=$(echo "$END - $START" | bc)
-MS=$(echo "$DIFF" | sed 's/\([0-9]*\)[.]\([0-9][0-9][0-9]\).*/\1s \2ms/' | sed 's/^s/0s/');
-echo -e "Result for" $2 " " $MS "\n"
-}
-
-
-pushd ./build > /dev/null
-runTest ./empty "None"
-runTest ./timer "Timer"
-runTest ./ssl "OpenSSL"
-runTest ./pcre "Pcre"
-runTest ./xml "Xml2"
-runTest ./xmlsec "XmlSec" "internally linked with openssl and xml2"
-popd > /dev/null
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-int main(int argc, const char *argv[])
-{
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include<stdio.h>
-#include <stdint.h>
-#include<openssl/ssl.h>
-#include <sys/time.h>
-
-int main(int argc, const char *argv[])
-{
- struct timeval start;
- struct timeval end;
-
-
- gettimeofday(&start, NULL);
- SSL_library_init();
- gettimeofday(&end, NULL);
-
-
- uint32_t st;
- uint32_t en;
-
- st = start.tv_sec * 1000 + start.tv_usec / 1000;
- en = end.tv_sec * 1000 + end.tv_usec / 1000;
-
- printf("Command execution time :\t %d ms %d us\n", en-st, (end.tv_usec - start.tv_usec)%1000);
-
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include<stdio.h>
-#include <stdint.h>
-#include<pcre.h>
-#include <sys/time.h>
-
-int main(int argc, const char *argv[])
-{
- struct timeval start;
- struct timeval end;
-
-
- gettimeofday(&start, NULL);
- pcre_version();
- gettimeofday(&end, NULL);
-
-
- uint32_t st;
- uint32_t en;
-
- st = start.tv_sec * 1000 + start.tv_usec / 1000;
- en = end.tv_sec * 1000 + end.tv_usec / 1000;
-
- printf("Command execution time :\t %d ms %d us\n", en-st, (end.tv_usec - start.tv_usec)%1000);
-
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include<stdio.h>
-#include <stdint.h>
-#include <sys/time.h>
-
-int main(int argc, const char *argv[])
-{
- struct timeval start;
- struct timeval end;
-
-
- gettimeofday(&start, NULL);
- gettimeofday(&end, NULL);
-
- uint32_t st;
- uint32_t en;
-
- st = start.tv_sec * 1000 + start.tv_usec / 1000;
- en = end.tv_sec * 1000 + end.tv_usec / 1000;
-
- printf("Command execution time :\t %d ms %d us\n", en-st, (end.tv_usec - start.tv_usec)%1000);
-
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include<stdio.h>
-#include <stdint.h>
-#include <sys/time.h>
-#include <libxml/globals.h>
-
-
-int main(int argc, const char *argv[])
-{
- struct timeval start;
- struct timeval end;
-
-
- gettimeofday(&start, NULL);
- xmlCleanupGlobals();
- gettimeofday(&end, NULL);
-
-
- uint32_t st;
- uint32_t en;
-
- st = start.tv_sec * 1000 + start.tv_usec / 1000;
- en = end.tv_sec * 1000 + end.tv_usec / 1000;
-
- printf("Command execution time :\t %d ms %d us\n", en-st, (end.tv_usec - start.tv_usec)%1000);
-
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include<stdio.h>
-#include <stdint.h>
-#include <sys/time.h>
-#include <xmlsec/xmlsec.h>
-
-
-int main(int argc, const char *argv[])
-{
- struct timeval start;
- struct timeval end;
-
-
- gettimeofday(&start, NULL);
- xmlSecInit();
- gettimeofday(&end, NULL);
-
-
- uint32_t st;
- uint32_t en;
-
- st = start.tv_sec * 1000 + start.tv_usec / 1000;
- en = end.tv_sec * 1000 + end.tv_usec / 1000;
-
- printf("Command execution time :\t %d ms %d us\n", en-st, (end.tv_usec - start.tv_usec)%1000);
-
- return 0;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file ace_server_api.cpp
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains constants for ACE server interface & methods.
- */
-
-#include "ace_server_api.h"
-
-namespace RPC {
-
-const std::string AceServerApi::INTERFACE_NAME =
- "org.tizen.AceCheckAccessInterface";
-const std::string AceServerApi::ECHO_METHOD = "echo";
-const std::string AceServerApi::CHECK_ACCESS_METHOD = "check_access";
-
-} // namespace RPC
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file ace_server_api.h
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains definitions ACE server interface & methods.
- */
-#ifndef WRT_SRC_RPC_SECURITY_DAEMON_ACE_SERVER_API_H_
-#define WRT_SRC_RPC_SECURITY_DAEMON_ACE_SERVER_API_H_
-
-#include <string>
-
-namespace RPC {
-
-struct AceServerApi {
- // DBus interface name
- static const std::string INTERFACE_NAME;
- // RPC test function
- // IN std::string
- // OUT std::string
- static const std::string ECHO_METHOD;
- // IN string subject
- // IN string resource
- // IN vector<string> function param names
- // IN vector<string> function param values
- // OUT int allow, deny, popup type
- static const std::string CHECK_ACCESS_METHOD;
-};
-
-} // namespace RPC
-
-#endif // WRT_SRC_RPC_SECURITY_DAEMON_ACE_SERVER_API_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file ocsp_server_api.cpp
- * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version 1.0
- * @brief This file contains constants for OCSP server interface & methods.
- */
-
-#include "ocsp_server_api.h"
-
-namespace RPC {
-
-const std::string OcspServerApi::INTERFACE_NAME =
- "org.tizen.OcspCheck";
-const std::string OcspServerApi::ECHO_METHOD = "echo";
-const std::string OcspServerApi::CHECK_ACCESS_METHOD = "OcspCheck";
-
-} // namespace RPC
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file ocsp_server_api.h
- * @author Piotr Marcinkiewicz (p.marcinkiew@samsung.com)
- * @version 1.0
- * @brief This file contains definitions OCSP server interface & methods.
- */
-#ifndef WRT_SRC_RPC_SECURITY_DAEMON_OCSP_SERVER_API_H_
-#define WRT_SRC_RPC_SECURITY_DAEMON_OCSP_SERVER_API_H_
-
-#include <string>
-
-namespace RPC {
-
-struct OcspServerApi {
- // DBus interface name
- static const std::string INTERFACE_NAME;
- // RPC test function
- // IN std::string
- // OUT std::string
- static const std::string ECHO_METHOD;
- // Function checks WidgetStatus for installed widget.
- // https://106.116.37.24/wiki/WebRuntime/Security/Widget_Signatures
- // IN WidgetHandle Widget ID in Database
- // OUT WidgetStatus GOOD/REVOKED
- static const std::string CHECK_ACCESS_METHOD;
-};
-
-} // namespace RPC
-
-#endif // WRT_SRC_RPC_SECURITY_DAEMON_OCSP_SERVER_API_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file popup_ace_data_types.h
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#ifndef POPUP_ACE_DATA_TYPES_H_
-#define POPUP_ACE_DATA_TYPES_H_
-
-#include <vector>
-#include <string>
-#include <dpl/ace-dao-ro/wrt_db_types.h>
-
-// additional data needed by PolicyEvaluaor to recognize Popup Response
-struct AceUserdata
-{
- //TODO INVALID_WIDGET_HANDLE is defined in wrt_plugin_export.h.
- // I do not want to include that file here...
- AceUserdata(): handle(-1) {}
-
- WidgetHandle handle;
- std::string subject;
- std::string resource;
- std::vector<std::string> paramKeys;
- std::vector<std::string> paramValues;
- std::string session;
-};
-
-typedef bool SecurityStatus;
-
-#endif /* POPUP_ACE_DATA_TYPES_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file popup_response_service_api.h
- * @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#ifndef WRT_SRC_RPC_SECURITY_DAEMON_API_POPUP_RESPONSE_SERVICE_API_H
-#define WRT_SRC_RPC_SECURITY_DAEMON_API_POPUP_RESPONSE_SERVICE_API_H
-
-#include <string>
-
-namespace RPC
-{
-
-struct PopupResponseServiceApi
-{
- static std::string getInterfaceName()
- {
- return "org.tizen.PopupResponse";
- }
-
- static std::string getValidationMethodName()
- {
- return "validate";
- }
-};
-
-}
-
-#endif // WRT_SRC_RPC_SECURITY_DAEMON_API_POPUP_RESPONSE_SERVICE_API_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file popup_response_dispatcher.cpp
- * @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#include "popup_response_dispatcher.h"
-#include <vector>
-#include <string>
-#include <rpc/security-daemon/api/popup_response_service_api.h>
-#include <dpl/dbus/dbus_server_deserialization.h>
-#include <dpl/dbus/dbus_server_serialization.h>
-#include <popup_ace_data_types.h>
-#include <dpl/ace-dao-ro/PromptModel.h>
-
-namespace RPC
-{
-
-void PopupResponseDispatcher::onMethodCall(GDBusConnection* /*connection*/,
- const gchar* /*sender*/,
- const gchar* /*objectPath*/,
- const gchar* /*interfaceName*/,
- const gchar* methodName,
- GVariant* parameters,
- GDBusMethodInvocation* invocation)
-{
- if (0 == g_strcmp0(methodName,
- PopupResponseServiceApi::
- getValidationMethodName().c_str()))
- {
- // popup answer data
- bool allowed = false;
- int iValid = 0;
-
- // ACE data
- AceUserdata acedata;
-
- if (!DPL::DBus::ServerDeserialization::deserialize(parameters,
- &allowed,
- &iValid,
- &(acedata.handle),
- &(acedata.subject),
- &(acedata.resource),
- &(acedata.paramKeys),
- &(acedata.paramValues))){
- g_dbus_method_invocation_return_dbus_error(
- invocation,
- "org.tizen.PopupResponse.UnknownError",
- "Error in deserializing input parameters");
- return;
- }
-
- if (acedata.paramKeys.size() != acedata.paramValues.size()) {
- g_dbus_method_invocation_return_dbus_error(
- invocation,
- "org.tizen.PopupResponse.UnknownError",
- "Varying sizes of parameter names and parameter values");
- return;
- }
-
- // TODO create right prompt model (but this one is currently ok)
- Prompt::PromptLabelsPtr promptDataPtr(
- Prompt::PromptModel::getOneShotModel(acedata.resource));
-
- Prompt::Validity valid = static_cast<Prompt::Validity>(iValid);
- // assign SMACK labels basing on allowed/valid value
- (void) allowed;
- (void) valid;
-
- //TODO: SecurityDaemon actions
- bool response = true;
-
- // IMPORTANT!!! Both things mentioned above:
- // - assign SMACK labels...
- // - "SecurityDaemon actions"
- // must be handled in the Security Controller,
- // here just need to post ONE appropriate event
- // to the Controller and implement it there.
-
- g_dbus_method_invocation_return_value(
- invocation,
- DPL::DBus::ServerSerialization::serialize(response));
- }
-}
-
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file popup_response_dispatcher.h
- * @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#ifndef WRT_SRC_RPC_DAEMON_SERVICE_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_DISPATCHER_H
-#define WRT_SRC_RPC_DAEMON_SERVICE_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_DISPATCHER_H
-
-#include <dpl/dbus/dispatcher.h>
-
-namespace RPC {
-
-class PopupResponseDispatcher : public DPL::DBus::Dispatcher
-{
-public:
- void onMethodCall(GDBusConnection *connection,
- const gchar *sender,
- const gchar *objectPath,
- const gchar *interfaceName,
- const gchar *methodName,
- GVariant *parameters,
- GDBusMethodInvocation *invocation);
-};
-
-}
-
-#endif // WRT_SRC_RPC_DAEMON_SERVICE_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_DISPATCHER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file popup_response_service.cpp
- * @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#include <memory>
-#include <dpl/dbus/interface.h>
-#include <rpc/security-daemon/api/popup_response_service_api.h>
-#include "popup_response_service.h"
-#include "popup_response_service_config.h"
-
-namespace
-{
-const std::string nodeInfo =
- "<?xml version=\"1.0\"?>"
- "<node>"
- " <interface name='" +
- RPC::PopupResponseServiceApi::getInterfaceName() + "'>"
- " <method name='" +
- RPC::PopupResponseServiceApi::getValidationMethodName() + "'>"
- // popup answer data
- " <arg type='i' name='allowed' direction='in'/>"
- " <arg type='i' name='valid' direction='in'/>"
-
- // this is copied from ace_server_dbus_interface
- " <arg type='i' name='handle' direction='in'/>"
- " <arg type='s' name='subject' direction='in'/>"
- " <arg type='s' name='resource' direction='in'/>"
- " <arg type='as' name='parameter names' direction='in'/>"
- " <arg type='as' name='parameter values' direction='in'/>"
-
- " <arg type='b' name='response' direction='out'/>"
- " </method>"
- " </interface>"
- "</node>";
-}
-
-namespace RPC {
-
-void PopupResponseService::initialize()
-{
- g_type_init();
-
- auto ifaces = DPL::DBus::Interface::fromXMLString(nodeInfo);
- if (ifaces.empty())
- {
- ThrowMsg(DPL::Exception, "No interface description.");
- }
-
- auto iface = ifaces.at(0);
-
- m_dispatcher.reset(new PopupResponseDispatcher());
- iface->setDispatcher(m_dispatcher.get());
-
- m_object = DPL::DBus::Object::create(PopupResponseServiceConfig::getObjectPath(),
- iface);
-}
-
-void PopupResponseService::deinitialize()
-{
- m_object.reset();
- m_dispatcher.reset();
-}
-
-void PopupResponseService::start()
-{
- m_connection = DPL::DBus::Connection::systemBus();
- m_connection->registerObject(m_object);
- m_connection->registerService(PopupResponseServiceConfig::getServiceName());
-}
-
-void PopupResponseService::stop()
-{
- m_connection.reset();
-}
-
-}
-
-DAEMON_REGISTER_SERVICE_MODULE(RPC::PopupResponseService)
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file popup_response_service.h
- * @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#ifndef WRT_RPC_SECURITY_DAEMON_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_SERVICE_H
-#define WRT_RPC_SECURITY_DAEMON_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_SERVICE_H
-
-#include <memory>
-#include <security-daemon/security_daemon.h>
-#include <dpl/dbus/connection.h>
-#include <dpl/dbus/object.h>
-#include "popup_response_dispatcher.h"
-
-namespace RPC {
-
-class PopupResponseService : public SecurityDaemon::DaemonService
-{
-public:
- void initialize();
-
- void deinitialize();
-
- void start();
-
- void stop();
-
-private:
- DPL::DBus::ConnectionPtr m_connection;
- DPL::DBus::ObjectPtr m_object;
- std::unique_ptr<PopupResponseDispatcher> m_dispatcher;
-};
-
-}
-
-#endif // WRT_RPC_SECURITY_DAEMON_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_SERVICE_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file popup_response_service_info.h
- * @author Zbigniew Kostrzewa (z.kostrzewa@samsung.com)
- * @version 1.0
- * @brief
- */
-
-#ifndef WRT_SRC_RPC_SECURITY_DAEMON_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_SERVICE_CONFIG_H
-#define WRT_SRC_RPC_SECURITY_DAEMON_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_SERVICE_CONFIG_H
-
-namespace RPC
-{
-
-struct PopupResponseServiceConfig
-{
- static std::string getObjectPath()
- {
- return "/org/tizen/PopupResponse";
- }
-
- static std::string getServiceName()
- {
- return "org.tizen.PopupResponse";
- }
-};
-
-}
-
-#endif // WRT_SRC_RPC_SECURITY_DAEMON_POPUP_RESPONSE_SERVICE_POPUP_RESPONSE_SERVICE_CONFIG_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file security_daemon_dbus_config.cpp
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains security daemon DBus configuration constants.
- */
-#include "security_daemon_dbus_config.h"
-
-#include <string>
-
-namespace RPC {
-
-const std::string SecurityDaemonConfig::OBJECT_PATH =
- "/org/tizen/SecurityDaemon";
-const std::string SecurityDaemonConfig::SERVICE_NAME =
- "org.tizen.SecurityDaemon";
-
-} // namespace RPC
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file security_daemon_dbus_config.h
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief This file contains security daemon DBus configuration.
- */
-#ifndef WRT_SRC_RPC_SECURITY_DAEMON_DBUS_CONFIG_H_
-#define WRT_SRC_RPC_SECURITY_DAEMON_DBUS_CONFIG_H_
-
-#include <string>
-
-namespace RPC {
-
-struct SecurityDaemonConfig {
- static const std::string OBJECT_PATH;
- static const std::string SERVICE_NAME;
-};
-
-} // namespace RPC
-
-#endif // WRT_SRC_RPC_SECURITY_DAEMON_DBUS_CONFIG_H_
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file fake_rpc_connection.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of fake RPC connection
- */
-#include "fake_rpc_connection.h"
-
-using namespace DPL;
-using namespace DPL::RPC;
-
-// This is helper class for defining servers in Client side via string address
-// (the same as with sockets).
-// It is is used as Singleton (it is for private usage for Client and Server
-class FakeRpcServerMapper{
-private:
- FakeRpcServerMapper() {}
- ~FakeRpcServerMapper() {}
- static void RegisterServer(FakeRpcServer *server, const Address &addr)
- {
- LogPedantic("Registering Server...");
- m_servers.insert(std::make_pair(addr, server));
- }
-
- static void UnregisterServer(const Address &addr)
- {
- LogPedantic("Unregistering Server...");
- m_servers.erase(addr);
- }
-
- static FakeRpcServer *GetServer(const Address &addr)
- {
- LogPedantic("Getting Server...");
- AddServMap::iterator ret = m_servers.find(addr);
- if(ret == m_servers.end())
- return NULL;
- return ret->second;
- }
-
- typedef std::map<Address, FakeRpcServer *> AddServMap;
- static AddServMap m_servers;
-
- friend class FakeRpcServer;
- friend class FakeRpcClient;
-};
-FakeRpcServerMapper::AddServMap FakeRpcServerMapper::m_servers;
-
-FakeRpcConnection::FakeRpcConnection(FakeRpcConnector *connector)
-: m_other(NULL),
- m_connector(connector)
-{
-}
-
-FakeRpcConnection::~FakeRpcConnection()
-{
- LogPedantic("DTOR");
- if(m_connector)
- m_connector->Close(this);
-}
-
-void FakeRpcConnection::AsyncCall(const RPCFunction &function)
-{
- typedef AbstractRPCConnectionEvents::AsyncCallEvent AsyncCallEvent;
-
- m_other->EventSupport<AsyncCallEvent>::EmitEvent(
- AsyncCallEvent(RPCFunction(function), EventSender(this)),
- DPL::Event::EmitMode::Queued);
-}
-
-///////////////////////////////////
-
-FakeRpcClient::FakeRpcClient(): m_connection(NULL)
-{
- Touch();
-}
-
-FakeRpcClient::~FakeRpcClient()
-{
- Close();
-}
-
-void FakeRpcClient::Open(const std::string &addr)
-{
- LogPedantic("Openning Client...");
- if (m_connection){
- //todo throw that already Opened
- LogPedantic("Client already opened!");
- return;
- }
-
- FakeRpcServer *serv = FakeRpcServerMapper::GetServer(Address(addr));
-
- if(NULL == serv){
- LogPedantic("Server not found.");
- return;
- }
-
- LogPedantic("Server found.");
-
- m_connection = new FakeRpcConnection(this);
-
- LogPedantic("client->server Connecting event emit...");
-
- FakeRPCEvents::ConnectingEvent ret(this, m_connection);
- serv->DPL::Event::ControllerEventHandler<FakeRPCEvents::ConnectingEvent>
- ::PostEvent(ret);
-}
-
-void FakeRpcClient::Close(FakeRpcConnection */*connection*/)
-{
- if(m_connection){
- LogPedantic("Closing Client...");
- m_connection->m_connector = NULL;
- m_connection = NULL;
- }
-}
-
-void FakeRpcClient::OnEventReceived(const FakeRPCEvents::ConnectingEvent &event)
-{
- LogPedantic("Client On ConnectingEvent...");
- typedef AbstractRPCConnectorEvents::ConnectionEstablishedEvent
- EstablishedEvent;
-
- FakeRpcConnection *server_connection = event.GetArg1();
- m_connection->m_other = server_connection;
-
- EventSupport<EstablishedEvent>::EmitEvent(
- EstablishedEvent(NULL, m_connection, EventSender(this)),
- DPL::Event::EmitMode::Queued);
-}
-
-
-///////////////////////////////////
-
-FakeRpcServer::FakeRpcServer()
-{
- Touch();
-}
-
-FakeRpcServer::~FakeRpcServer()
-{
- CloseAll();
-}
-
-void FakeRpcServer::Open(const std::string &addr)
-{
- LogPedantic("Opening Server...");
- FakeRpcServerMapper::RegisterServer(this,Address(addr));
-}
-
-void FakeRpcServer::Close(FakeRpcConnection *connection)
-{
- std::set<FakeRpcConnection *>::iterator it = m_connections.find(connection);
- if(it != m_connections.end()){
- connection->m_connector = NULL;
- m_connections.erase(it);
- }
-}
-
-void FakeRpcServer::CloseAll()
-{
- LogPedantic("Closing Server...");
- FOREACH(it, m_connections){
- (*it)->m_connector = NULL;
- }
- m_connections.clear();
- LogPedantic("Connections closed");
-}
-
-void FakeRpcServer::OnEventReceived(const FakeRPCEvents::ConnectingEvent &event)
-{
- LogPedantic("Server On ConnectingEvent...");
- typedef AbstractRPCConnectorEvents::ConnectionEstablishedEvent
- EstablishedEvent;
-
- FakeRpcClient* client = event.GetArg0();
- FakeRpcConnection* client_connection = event.GetArg1();
-
- FakeRpcConnection* server_connection = new FakeRpcConnection(this);
- server_connection->m_other = client_connection;
-
- LogPedantic("Storing connection");
- m_connections.insert(server_connection);
-
- FakeRPCEvents::ConnectingEvent ret(client, server_connection);
-
- LogPedantic("Established event emit...");
- EventSupport<EstablishedEvent>::EmitEvent(
- EstablishedEvent(NULL, server_connection, EventSender(this)),
- DPL::Event::EmitMode::Queued);
-
- LogPedantic("server->client Connecting event emit...");
- client->DPL::Event::ControllerEventHandler<FakeRPCEvents::ConnectingEvent>
- ::PostEvent(ret);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file fake_rpc_connection.h
- * @author Pawel Sikorski (p.sikorsk@samsung.com)
- * @version 1.0
- * @brief This file is the header file for fake RPC connection
- */
-
-#ifndef DPL_FAKE_RPC_CONNECTION_H
-#define DPL_FAKE_RPC_CONNECTION_H
-
-#include <map>
-#include <set>
-#include <dpl/rpc/abstract_rpc_connection.h>
-#include <dpl/rpc/abstract_rpc_connector.h>
-#include <dpl/address.h>
-#include <dpl/event/controller.h>
-
-class FakeRpcClient;
-class FakeRpcServer;
-class FakeRpcConnection;
-class FakeRpcConnector;
-
-namespace FakeRPCEvents{
-DECLARE_GENERIC_EVENT_2(ConnectingEvent, FakeRpcClient *, FakeRpcConnection *)
-}
-
-class FakeRpcConnector
-: public DPL::RPC::AbstractRPCConnector
- ,public DPL::Event::Controller<DPL::TypeListDecl<FakeRPCEvents::ConnectingEvent>::Type>
-{
-public:
- virtual void Close(FakeRpcConnection *) = 0;
-};
-
-// This is Fake Connection, that during Async call emmits (to itself)
-class FakeRpcConnection : public DPL::RPC::AbstractRPCConnection
-{
-public:
- virtual ~FakeRpcConnection();
- virtual void AsyncCall(const DPL::RPC::RPCFunction &function);
- virtual void Ping() { /*empty*/}
-protected:
- explicit FakeRpcConnection(FakeRpcConnector *);
- FakeRpcConnection *m_other;
- FakeRpcConnector *m_connector;
- friend class FakeRpcServer;
- friend class FakeRpcClient;
-};
-
-// This is FakeRpc Client. During connection opening, it looks through
-// registered servers to find appropriate one. If server is found, event is
-// emitted to the server with information about the connection, which should
-// be used for AsyncCall.
-class FakeRpcClient
-: public FakeRpcConnector
-{
-public:
- FakeRpcClient();
- virtual ~FakeRpcClient();
- void Open(const std::string &addr);
- virtual void Close(FakeRpcConnection *connection = NULL);
-protected:
- void OnEventReceived(const FakeRPCEvents::ConnectingEvent &event);
-
- FakeRpcConnection * m_connection;
- friend class FakeRpcServer;
-};
-
-// This is FakeRpc Server. During opening the server for listening, server
-// registers itself to "common map", so Clients will be able to connect
-// to him.
-// Server listens for ConnectingEvent.
-class FakeRpcServer
-: public FakeRpcConnector
-{
-public:
- FakeRpcServer();
- virtual ~FakeRpcServer();
- void Open(const std::string &addr);
- void CloseAll();
- virtual void Close(FakeRpcConnection *);
-protected:
- void OnEventReceived(const FakeRPCEvents::ConnectingEvent &event);
-
- std::set<FakeRpcConnection *> m_connections;
- friend class FakeRpcClient;
-};
-
-#endif /* DPL_FAKE_RPC_CONNECTION_H */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file rpc_client.cpp
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 1.0
- */
-
-#include "rpc_client.h"
-
-#include <dpl/assert.h>
-#include <dpl/rpc/rpc_function.h>
-#include <dpl/log/log.h>
-#include <dpl/serialization.h>
-
-#include "ui_process_rpc.h"
-
-namespace UIProcess {
-
-RpcClient::RpcClient() :
- m_initialized(false),
- m_requestCount(0),
- m_popupLoopHandle(0)
-{
- DPL::Event::EventSupport<ConnectionEstablishedEvent>::AddListener(this);
- LogDebug("Opening Connection");
-
- //FIXME check for errors
- Open(connectionName);
-}
-
-RpcClient::~RpcClient()
-{
- Assert(m_requestCount == 0);
- closeConnection();
-}
-
-void RpcClient::stopNestedLoop(const bool isAccessAllowed)
-{
- DPL::Event::NestedLoopManagerSingleton::Instance().exit(
- m_popupLoopHandle,
- new PopupResponse(isAccessAllowed));
-}
-
-UniquePopupResponsePtr RpcClient::showSyncPopup(PolicyEffect popupType,
- const AceUserdata &aceData)
-{
-
- if(!m_connection || !m_initialized) {
- Throw(Exception::NotConnected);
- }
-
- DPL::RPC::RPCFunction proc;
-
- //FIXME really lock all m_responseDelegate????
- Assert(++m_requestCount == 1);
- m_responseDelegate = ResponseDelegate(this, &RpcClient::stopNestedLoop);
- proc.AppendArg(popupType);
-
- // ACE additional data
- proc.AppendArg(aceData.handle);
- proc.AppendArg(aceData.subject);
- proc.AppendArg(aceData.resource);
- DPL::Serialization::Serialize(proc, aceData.paramKeys);
- DPL::Serialization::Serialize(proc, aceData.paramValues);
-
- m_connection->AsyncCall(proc);
-
- m_popupLoopHandle =
- DPL::Event::NestedLoopManagerSingleton::Instance().getNewHandle();
-
- UniquePopupResponsePtr decision(
- static_cast<PopupResponse*>(
- DPL::Event::NestedLoopManagerSingleton::Instance().begin(
- m_popupLoopHandle))
- );
- m_popupLoopHandle = 0;
- return std::move(decision);
-}
-
-void RpcClient::OnEventReceived(const ConnectionEstablishedEvent& /*event*/)
-{
- // using m_connection from FakeRPC parent
- m_initialized = true;
- Assert(m_connection);
-
- // Only one connection. Ignore any attempts to establish new one
- DPL::Event::EventSupport<ConnectionEstablishedEvent>::RemoveListener(this);
-
- m_connection->DPL::Event::EventSupport<AsyncCallEvent>::AddListener(this);
- m_connection->DPL::Event::EventSupport<ConnectionBrokenEvent>::AddListener(this);
- m_connection->DPL::Event::EventSupport<ConnectionClosedEvent>::AddListener(this);
-
- DPL::Event::EventSupport<AcceptingCallsEvent>::EmitEvent(
- AcceptingCallsEvent());
-}
-
-void RpcClient::OnEventReceived(const ConnectionClosedEvent& /*event*/)
-{
- Assert(m_connection);
- closeConnection();
-}
-
-void RpcClient::OnEventReceived(const ConnectionBrokenEvent& /*event*/)
-{
- Assert(m_connection);
- closeConnection();
-}
-
-void RpcClient::closeConnection()
-{
- m_initialized = false;
- if (m_connection) {
- m_connection->DPL::Event::EventSupport<ConnectionBrokenEvent>::RemoveListener(
- this);
- m_connection->DPL::Event::EventSupport<ConnectionClosedEvent>::RemoveListener(
- this);
- m_connection->DPL::Event::EventSupport<AsyncCallEvent>::RemoveListener(this);
- Close(m_connection);
- }
-}
-
-void RpcClient::OnEventReceived(const AsyncCallEvent& event)
-{
- DPL::RPC::RPCFunction fun = event.GetArg0();
-
- // consume rpc function
- bool isAccessAllowed;
- fun.ConsumeArg(isAccessAllowed);
-
- Assert(--m_requestCount == 0);
- m_responseDelegate(isAccessAllowed);
-}
-
-} // namespace UIProcess
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file rpc_client.h
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 1.0
- */
-
-#ifndef WRT_SRC_RPC_UI_PROCESS_RPC_CLIENT_H_
-#define WRT_SRC_RPC_UI_PROCESS_RPC_CLIENT_H_
-
-#include <memory>
-
-#include <stddef.h>
-#include <string>
-#include <vector>
-
-#include <dpl/exception.h>
-#include <dpl/fast_delegate.h>
-#include <dpl/generic_event.h>
-#include <dpl/event/event_support.h>
-#include <dpl/event/nested_loop.h>
-
-#include <dpl/ace/PolicyEffect.h>
-#include <dpl/ace-dao-ro/wrt_db_types.h>
-#include <popup_ace_data_types.h>
-#include "fake_rpc_connection.h"
-
-namespace UIProcess {
-
-DECLARE_GENERIC_EVENT_0(AcceptingCallsEvent)
-
-struct PopupResponse
-{
- PopupResponse(bool pIsAccessAllowed) :
- isAccessAllowed(pIsAccessAllowed)
- {
- }
- bool isAccessAllowed;
-};
-
-typedef std::unique_ptr<PopupResponse> UniquePopupResponsePtr;
-
-class RpcClient :
- public FakeRpcClient,
- public DPL::Event::EventSupport<AcceptingCallsEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::AsyncCallEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectorEvents::ConnectionEstablishedEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::ConnectionClosedEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::ConnectionBrokenEvent>
-{
- public:
- typedef DPL::FastDelegate<void (const bool isAccessAllowed)>
- ResponseDelegate;
-
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, NotConnected)
- };
-
- RpcClient();
- virtual ~RpcClient();
-
- UniquePopupResponsePtr showSyncPopup(
- PolicyEffect effect,
- const AceUserdata &aceData);
-
- private:
- typedef DPL::RPC::AbstractRPCConnectionEvents::AsyncCallEvent AsyncCallEvent;
- typedef DPL::RPC::AbstractRPCConnectorEvents::ConnectionEstablishedEvent
- ConnectionEstablishedEvent;
- typedef DPL::RPC::AbstractRPCConnectionEvents::ConnectionClosedEvent
- ConnectionClosedEvent;
- typedef DPL::RPC::AbstractRPCConnectionEvents::ConnectionBrokenEvent
- ConnectionBrokenEvent;
-
- void closeConnection();
-
- virtual void OnEventReceived(const ConnectionEstablishedEvent &event);
- virtual void OnEventReceived(const ConnectionClosedEvent& event);
- virtual void OnEventReceived(const ConnectionBrokenEvent& event);
- virtual void OnEventReceived(const AsyncCallEvent& event);
-
- void stopNestedLoop(bool isAccessAllowed);
-
- bool m_initialized;
- int m_requestCount;
- ResponseDelegate m_responseDelegate;
- DPL::Event::LoopHandle m_popupLoopHandle;
-};
-} // namespace UIProcess
-
-#endif /* WRT_SRC_RPC_UI_PROCESS_RPC_CLIENT_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file rpc_server.cpp
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 1.0
- */
-
-#include "rpc_server.h"
-#include <stddef.h>
-#include <dpl/serialization.h>
-#include <dpl/singleton_impl.h>
-
-#include "ui_process_rpc.h"
-#include <wrt_db_types.h>
-#include <popup_ace_data_types.h>
-#include <dpl/ace/PolicyEffect.h>
-
-
-IMPLEMENT_SINGLETON(UIProcess::RpcServer)
-
-namespace UIProcess {
-
-
-RpcServer::RpcServer() : FakeRpcServer()
-{
- DPL::Event::EventSupport<ConnectionEstablishedEvent>::AddListener(this);
- Open(connectionName);
-}
-
-RpcServer::~RpcServer()
-{
- closeConnection();
-}
-
-
-void RpcServer::promptResult(const bool isAccessAllowed,
- AceUserdata const * userData)
-{
- if(!m_connection) {
- Throw(Exception::NotConnected);
- }
-
- Assert(userData);
- //we should free ACE Userdata after sending it to rpc_client
- std::unique_ptr<AceUserdata> data (const_cast<AceUserdata*>(userData));
-
- (void) data;
-
- DPL::RPC::RPCFunction fun;
- fun.AppendArg(isAccessAllowed);
- m_connection->AsyncCall(fun);
-}
-
-void RpcServer::closeConnection()
-{
- if(!!m_connection)
- {
- m_connection->DPL::Event::EventSupport<ConnectionBrokenEvent>::RemoveListener(
- this);
- m_connection->DPL::Event::EventSupport<ConnectionClosedEvent>::RemoveListener(
- this);
- m_connection->DPL::Event::EventSupport<AsyncCallEvent>::RemoveListener(this);
- Close(m_connection.Get());
- m_connection.Reset();
- }
-}
-
-void RpcServer::OnEventReceived(const AsyncCallEvent& event)
-{
- DPL::RPC::RPCFunction fun = event.GetArg0();
-
- // consume rpc function
- PolicyEffect popupType;
- fun.ConsumeArg(popupType);
-
- //prompt result will free memory of data
- AceUserdata* data = new AceUserdata();
- fun.ConsumeArg(data->handle);
- fun.ConsumeArg(data->subject);
- fun.ConsumeArg(data->resource);
- DPL::Deserialization::Deserialize(fun,data->paramKeys);
- DPL::Deserialization::Deserialize(fun,data->paramValues);
-
- PopupsServerSingleton::Instance().showACEPopup(popupType,
- data,
- PopupsServer::IPCResponseDelegate(this,
- &RpcServer::promptResult));
-}
-
-void RpcServer::OnEventReceived(const ConnectionEstablishedEvent& event)
-{
- Assert(!m_connection);
- m_connection.Reset(static_cast<FakeRpcConnection*>(event.GetArg1()));
-
- // Only one connection. Ignore any attempts to establish new one
- DPL::Event::EventSupport<ConnectionEstablishedEvent>::RemoveListener(this);
-
- m_connection->DPL::Event::EventSupport<AsyncCallEvent>::AddListener(this);
- m_connection->DPL::Event::EventSupport<ConnectionBrokenEvent>::AddListener(this);
- m_connection->DPL::Event::EventSupport<ConnectionClosedEvent>::AddListener(this);
-}
-
-void RpcServer::OnEventReceived(const ConnectionClosedEvent& /*event*/)
-{
- Assert(!!m_connection);
- closeConnection();
-}
-
-void RpcServer::OnEventReceived(const ConnectionBrokenEvent& /*event*/)
-{
- Assert(!!m_connection);
- closeConnection();
-}
-} // namespace UIProcess
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file rpc_server.h
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 1.0
- */
-
-#ifndef WRT_SRC_RPC_UI_PROCESS_RPC_SERVER_H_
-#define WRT_SRC_RPC_UI_PROCESS_RPC_SERVER_H_
-
-#include <dpl/singleton.h>
-#include <dpl/exception.h>
-#include <dpl/noncopyable.h>
-#include <popups_server.h>
-#include "fake_rpc_connection.h"
-
-
-namespace UIProcess {
-
-class RpcServer :
- public FakeRpcServer,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::AsyncCallEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectorEvents::ConnectionEstablishedEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::ConnectionClosedEvent>,
- private DPL::Event::EventListener<
- DPL::RPC::AbstractRPCConnectionEvents::ConnectionBrokenEvent>
-{
- public:
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, NotConnected)
- };
-
- virtual ~RpcServer();
-
- private:
- typedef DPL::RPC::AbstractRPCConnectionEvents::AsyncCallEvent AsyncCallEvent;
- typedef DPL::RPC::AbstractRPCConnectorEvents::ConnectionEstablishedEvent
- ConnectionEstablishedEvent;
- typedef DPL::RPC::AbstractRPCConnectionEvents::ConnectionClosedEvent
- ConnectionClosedEvent;
- typedef DPL::RPC::AbstractRPCConnectionEvents::ConnectionBrokenEvent
- ConnectionBrokenEvent;
-
- friend class DPL::Singleton<RpcServer>;
-
- RpcServer();
- void promptResult(const bool isAccessAllowed,
- AceUserdata const * userData);
- void closeConnection();
-
- virtual void OnEventReceived(const ConnectionEstablishedEvent &event);
- virtual void OnEventReceived(const ConnectionClosedEvent& event);
- virtual void OnEventReceived(const ConnectionBrokenEvent& event);
- virtual void OnEventReceived(const AsyncCallEvent& event);
-
- DPL::ScopedPtr<FakeRpcConnection> m_connection;
-};
-
-} // namespace UIProcess
-
-typedef DPL::Singleton<UIProcess::RpcServer> RpcServerSingleton;
-
-#endif /* WRT_SRC_RPC_UI_PROCESS_RPC_SERVER_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- *
- * @file ui_process_rpc.h
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief Common declarations for ui process server and client
- */
-
-#ifndef WRT_SRC_RPC_UI_PROCESS_UI_PROCESS_RPC_H_
-#define WRT_SRC_RPC_UI_PROCESS_UI_PROCESS_RPC_H_
-
-#include <string>
-
-namespace UIProcess {
-
-//FIXME change to connectionName based on widgetName
-const std::string connectionName = "UIProcessPopupsServer";
-}
-
-
-#endif /* WRT_SRC_RPC_UI_PROCESS_UI_PROCESS_RPC_H_ */
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-ADD_SUBDIRECTORY(webapp-detail)
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-SET(TARGET_UG_LIB "ug-webapp-detail-efl")
-SET(TARGET_UG_EDJ "web-app.edj")
-SET(UGDIR "${UG_INSTALL_PREFIX}/ug/lib")
-SET(EDJDIR "${UG_INSTALL_PREFIX}/ug/res/edje/${TARGET_UG_LIB}")
-
-PKG_CHECK_MODULES(UG_WEB_APP_DETAIL_DEPS
- ecore
- elementary
- ui-gadget
- dpl-efl
- dpl-ace
- dpl-ace-dao-rw
- dpl-wrt-dao-rw
- REQUIRED)
-
-SET(UG_SOURCES
- ug.cpp
- view.cpp
- mainview.cpp
- detailview.cpp
- permview.cpp
- wac_feature.cpp
- tizen_feature.cpp
-)
-
-INCLUDE_DIRECTORIES(${UG_WEB_APP_DETAIL_DEPS_INCLUDE_DIRS})
-ADD_LIBRARY(${TARGET_UG_LIB} SHARED ${UG_SOURCES})
-ADD_DEFINITIONS("-DEDJFILE=\"${EDJDIR}/${TARGET_UG_EDJ}\"")
-
-STRING(REGEX REPLACE "[^0-9].*" "" UG_MAJOR_VERSION ${CMAKE_PACKAGE_VERSION})
-SET_TARGET_PROPERTIES(${TARGET_UG_LIB} PROPERTIES SOVERSION ${UG_MAJOR_VERSION})
-SET_TARGET_PROPERTIES(${TARGET_UG_LIB} PROPERTIES VERSION ${CMAKE_PACKAGE_VERSION})
-TARGET_LINK_LIBRARIES(${TARGET_UG_LIB} ${UG_WEB_APP_DETAIL_DEPS_LDFLAGS})
-INSTALL(TARGETS ${TARGET_UG_LIB} DESTINATION ${UGDIR})
-
-ADD_SUBDIRECTORY(edc)
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <dpl/foreach.h>
-#include <dpl/assert.h>
-
-#include "detailview.h"
-#include "util.h"
-
-namespace WebAppDetailSetting {
-
-void DetailView::getLocalizedInfo(void)
-{
- DPL::OptionalString locale;
-
- Assert(m_dao);
-
- locale = m_dao->getDefaultlocale();
- if (locale.IsNull()) {
- DPL::String lang_tag(L"");
- m_localizedInfo = m_dao->getLocalizedInfo(lang_tag);
- } else {
- m_localizedInfo = m_dao->getLocalizedInfo(*locale);
- }
-}
-
-void DetailView::addField(const char *title)
-{
- Evas_Object *ly;
-
- Assert(m_bx && title);
-
- ly = elm_layout_add(m_bx);
- if (!ly)
- return;
- elm_layout_theme_set(ly, "layout", "dialogue", "title");
- evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0.0);
- evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, 0.0);
- elm_object_part_text_set(ly, "elm.text", title);
- evas_object_show(ly);
- elm_box_pack_end(m_bx, ly);
-}
-
-void DetailView::addField(const char *title, const char *str)
-{
- Evas_Object *ly;
- Evas_Object *ef;
-
- Assert(m_bx && title);
-
- ly = elm_layout_add(m_bx);
- if (!ly)
- return;
- elm_layout_theme_set(ly, "layout", "dialogue", "1icon");
- evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0.0);
- evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, 0.0);
-
- ef = elm_editfield_add(ly);
- if (!ef) {
- evas_object_del(ly);
- return;
- }
-
- elm_editfield_label_set(ef, title);
- if (str)
- elm_entry_entry_set(elm_editfield_entry_get(ef), str);
-
- elm_object_disabled_set(ef, EINA_TRUE);
- elm_object_part_content_set(ly, "elm.icon", ef);
- evas_object_show(ly);
- elm_box_pack_end(m_bx, ly);
-}
-
-void DetailView::addDefInfo(void)
-{
- DPL::OptionalString ver;
-
- Assert(m_dao);
-
- addField(D_("IDS_COM_BODY_DETAILS_NAME"),
- m_localizedInfo.name.IsNull() ? NULL :
- DPL::ToUTF8String((*m_localizedInfo.name)).c_str());
-
- ver = m_dao->getVersion();
- /* FIXME: i18n */
- addField("Version",
- ver.IsNull() ? NULL :
- DPL::ToUTF8String((*ver)).c_str());
-
- /* FIXME: i18n */
- addField("Domain",
- m_dao->isTrusted() ? "Trusted" : "Untrusted");
-
- addField(D_("IDS_COM_BODY_DESCRIPTION"),
- m_localizedInfo.description.IsNull() ? NULL :
- DPL::ToUTF8String((*m_localizedInfo.description)).c_str());
-}
-
-void DetailView::addViewModes(void)
-{
- DPL::String mode;
- WrtDB::WindowModeList modes;
-
- Assert(m_dao);
-
- modes = m_dao->getWindowModes();
- if (modes.size() > 0) {
- FOREACH(it, modes)
- mode += *it + L",";
- /* remove comma */
- mode.resize(mode.length() - 1);
- /* FIXME: i18n */
- addField("View modes",
- DPL::ToUTF8String(mode).c_str());
- } else {
- /* FIXME: i18n */
- addField("View modes", NULL);
- }
-}
-
-void DetailView::addAuthorInfo(void)
-{
- DPL::OptionalString name;
- DPL::OptionalString email;
- DPL::OptionalString homepage;
-
- Assert(m_dao);
-
- addField(D_("IDS_COM_BODY_AUTHOR"));
-
- name = m_dao->getAuthorName();
- addField(D_("IDS_COM_BODY_DETAILS_NAME"),
- name.IsNull() ? NULL :
- DPL::ToUTF8String((*name)).c_str());
-
- email = m_dao->getAuthorEmail();
- if (!email.IsNull())
- addField(D_("IDS_COM_BODY_EMAIL"),
- DPL::ToUTF8String((*email)).c_str());
-
- homepage = m_dao->getAuthorHref();
- /* FIXME: i18n */
- if (!homepage.IsNull())
- addField("Homepage",
- DPL::ToUTF8String((*homepage)).c_str());
-}
-
-Evas_Object *DetailView::loadView(void)
-{
- Evas_Object *scr;
-
- resetBase();
-
- try {
- m_dao.Reset(new WrtDB::WidgetDAO(m_appID));
- getLocalizedInfo();
-
- scr = elm_scroller_add(m_parent);
- if (!scr)
- return NULL;
-
- m_bx = elm_box_add(scr);
- if (!m_bx) {
- evas_object_del(scr);
- return NULL;
- }
- evas_object_size_hint_weight_set(m_bx, EVAS_HINT_EXPAND, 0.0);
- evas_object_size_hint_align_set(m_bx, EVAS_HINT_FILL, 0.0);
- elm_object_content_set(scr, m_bx);
- evas_object_show(m_bx);
-
- addDefInfo();
- addViewModes();
- addAuthorInfo();
- resetBase(scr);
-
- return scr;
-
- } catch (const std::bad_alloc &) {
- return NULL;
- }
-}
-
-DetailView::DetailView(Evas_Object *parent, int appID) :
- m_parent(parent),
- m_bx(NULL),
- m_appID(appID)
-{
- Assert(parent);
- m_dao.Reset();
-}
-
-DetailView::~DetailView(void)
-{
-}
-
-} /* WebAppDetailSetting */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_DETAILVIEW_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_DETAILVIEW_H_
-
-#include <Evas.h>
-
-#undef None
-#include <dpl/wrt-dao-rw/widget_dao.h>
-
-#include "view.h"
-
-namespace WebAppDetailSetting {
-
-class DetailView : public View
-{
- Evas_Object *m_parent;
- Evas_Object *m_bx;
- DPL::ScopedPtr<WrtDB::WidgetDAO> m_dao;
- WrtDB::WidgetLocalizedInfo m_localizedInfo;
- int m_appID;
-
- void getLocalizedInfo(void);
-
- void addField(const char *title);
- void addField(const char *title, const char *str);
-
- void addDefInfo(void);
- void addViewModes(void);
- void addAuthorInfo(void);
-
- public:
- DetailView(Evas_Object *parent, int appID);
- ~DetailView(void);
-
- Evas_Object *loadView(void);
-};
-
-} /* WebAppDetailSetting */
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_DETAILVIEW_H_ */
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-ADD_CUSTOM_TARGET(${TARGET_UG_EDJ}
- COMMAND edje_cc
- ${CMAKE_CURRENT_SOURCE_DIR}/main.edc ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_UG_EDJ}
- DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/main.edc
-)
-ADD_DEPENDENCIES(${TARGET_UG_LIB} ${TARGET_UG_EDJ})
-INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_UG_EDJ} DESTINATION ${EDJDIR})
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_EDC_DEFS_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_EDC_DEFS_H_
-
-#define GRP_CONTENT "content"
-#define PART_DETAIL "swallow.detail"
-#define PART_PERM "swallow.permission"
-#define SIG_SHOW_PERM "show,permission"
-#define SIG_SHOW_DETAIL "show,detail"
-#define SRC_PROG "prog"
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_EDC_DEFS_H_ */
+++ /dev/null
-#include "defs.h"
-
-collections {
- group {
- name, GRP_CONTENT;
-
- parts {
- part {
- name, PART_DETAIL;
- type, SWALLOW;
- description {
- state, "default" 0.0;
- }
- description {
- state, "permission" 0.0;
- inherit, "default" 0.0;
- rel1.relative, -1.0 0.0;
- rel2.relative, 0.0 1.0;
- }
- }
-
- part {
- name, PART_PERM;
- type, SWALLOW;
- description {
- state, "default" 0.0;
- rel1.relative, 1.0 0.0;
- rel2.relative, 2.0 1.0;
- }
- description {
- state, "permission" 0.0;
- inherit, "default" 0.0;
- rel1.relative, 0.0 0.0;
- rel2.relative, 1.0 1.0;
- }
- }
- }
-
- programs {
- program {
- name, "show_detail";
- signal, SIG_SHOW_DETAIL;
- source, SRC_PROG;
- action, STATE_SET "default" 0.0;
- target, PART_DETAIL;
- target, PART_PERM;
- }
- program {
- name, "show_permission";
- signal, SIG_SHOW_PERM;
- source, SRC_PROG;
- action, STATE_SET "permission" 0.0;
- target, PART_DETAIL;
- target, PART_PERM;
- }
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_FEATURE_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_FEATURE_H_
-
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <dpl/ace/SettingsLogic.h>
-
-namespace WebAppDetailSetting {
-
-class Feature
-{
- std::string m_name;
- std::string m_uri;
- AceDB::PreferenceTypes m_perm;
-
- public:
- Feature(const char *name = NULL, const char *uri = NULL) :
- m_perm(AceDB::PreferenceTypes::PREFERENCE_DEFAULT)
- {
- if (name)
- m_name.assign(name);
- if (uri)
- m_uri.assign(uri);
- }
- void setPerm(AceDB::PreferenceTypes perm) { m_perm = perm; }
-
- std::string& getName(void) { return m_name; }
- std::string& getUri(void) { return m_uri; }
- AceDB::PreferenceTypes getPerm(void) { return m_perm; }
-};
-
-} /* WebAppDetailSetting */
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_FEATURE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-#include <ui-gadget-module.h>
-
-#include <dpl/assert.h>
-
-#include "mainview.h"
-#include "edc/defs.h"
-#include "util.h"
-
-namespace WebAppDetailSetting {
-
-void MainView::onBackBtnClicked(void *data,
- Evas_Object */*eo*/,
- void */*event_info*/)
-{
- MainView *mainView;
-
- mainView = static_cast<MainView *>(data);
- Assert(mainView);
- ug_destroy_me(mainView->getUG());
-}
-
-void MainView::onSegCtrlChanged(void *data,
- Evas_Object */*eo*/,
- void *event_info)
-{
- MainView *mainView;
- Evas_Object *subCtnt;
- Elm_Object_Item *it;
-
- mainView = static_cast<MainView *>(data);
- Assert(mainView);
- it = reinterpret_cast<Elm_Object_Item *>(event_info);
- Assert(it);
-
- subCtnt = mainView->getSubCtnt();
- if (!subCtnt)
- return;
-
- if (it == mainView->getSegCtrlDetail())
- elm_object_signal_emit(subCtnt,
- SIG_SHOW_DETAIL, SRC_PROG);
- else if (it == mainView->getSegCtrlPerm())
- elm_object_signal_emit(subCtnt,
- SIG_SHOW_PERM, SRC_PROG);
-}
-
-Evas_Object *MainView::createCtrlBar(Evas_Object *parent)
-{
- Evas_Object *ctrlBar;
- Evas_Object *segCtrl;
-
- ctrlBar = elm_controlbar_add(parent);
- if (!ctrlBar)
- return NULL;
- elm_object_style_set(ctrlBar, "naviframe");
-
- segCtrl = elm_segment_control_add(ctrlBar);
- if (!segCtrl) {
- evas_object_del(ctrlBar);
- return NULL;
- }
-
- m_segCtrlDetail = elm_segment_control_item_add(segCtrl,
- NULL,
- D_("IDS_COM_BODY_DETAILS"));
- /* FIXME: i18n */
- m_segCtrlPerm = elm_segment_control_item_add(segCtrl, NULL, "Permissions");
- elm_segment_control_item_selected_set(m_segCtrlDetail, EINA_TRUE);
- elm_controlbar_object_item_append(ctrlBar, segCtrl, 2);
- evas_object_smart_callback_add(segCtrl, "changed", onSegCtrlChanged, this);
-
- return ctrlBar;
-}
-
-Evas_Object *MainView::createContent(Evas_Object *parent)
-{
- Evas_Object *nf;
- Evas_Object *btn;
- Evas_Object *ctrlBar;
- Evas_Object *ly;
- Elm_Object_Item *it;
-
- Assert(parent);
- nf = elm_naviframe_add(parent);
- if (!nf)
- return NULL;
-
- ly = elm_layout_add(nf);
- if (!ly)
- goto del_nf;
- elm_layout_file_set(ly, EDJFILE, GRP_CONTENT);
-
- btn = elm_button_add(nf);
- if (!btn)
- goto del_nf;
- elm_object_style_set(btn, "naviframe/end_btn/default");
- evas_object_smart_callback_add(btn, "clicked", onBackBtnClicked, this);
- /* FIXME: i18n */
- it = elm_naviframe_item_push(nf, "More details", btn, NULL, ly, NULL);
-
- ctrlBar = createCtrlBar(nf);
- if (!ctrlBar)
- goto del_nf;
- elm_object_item_part_content_set(it,
- ELM_NAVIFRAME_ITEM_OPTIONHEADER, ctrlBar);
-
- try {
- m_detail.Reset(new DetailView(ly, m_appID));
- elm_object_part_content_set(ly, PART_DETAIL, m_detail->loadView());
- m_perm.Reset(new PermView(ly, m_appID));
- elm_object_part_content_set(ly, PART_PERM, m_perm->loadView());
- m_subCtnt = ly;
-
- return nf;
-
- } catch (const std::bad_alloc &) {
- m_detail.Reset();
- m_perm.Reset();
- }
-
-del_nf:
- evas_object_del(nf);
-
- return NULL;
-}
-
-Evas_Object *MainView::loadView(void)
-{
- Evas_Object *ly;
- Evas_Object *eo;
- Evas_Object *parent;
-
- Assert(m_ug);
- resetBase();
-
- parent = static_cast<Evas_Object *>(ug_get_parent_layout(m_ug));
- Assert(parent);
-
- ly = elm_layout_add(parent);
- if (!ly)
- return NULL;
- elm_layout_theme_set(ly, "layout", "application", "default");
-
- eo = elm_bg_add(ly);
- if (!eo)
- goto del_ly;
- elm_object_part_content_set(ly, "elm.swallow.bg", eo);
-
- eo = createContent(ly);
- if (!eo)
- goto del_ly;
- elm_object_part_content_set(ly, "elm.swallow.content", eo);
-
- resetBase(ly);
-
- return ly;
-
-del_ly:
- evas_object_del(ly);
-
- return NULL;
-}
-
-MainView::MainView(struct ui_gadget *ug, int appId) :
- m_ug(ug),
- m_appID(appId),
- m_subCtnt(NULL),
- m_segCtrlDetail(NULL),
- m_segCtrlPerm(NULL)
-{
- Assert(ug);
-
- m_detail.Reset();
- m_perm.Reset();
-}
-
-MainView::~MainView(void)
-{
-}
-
-} /* WebAppDetailSetting */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_MAINVIEW_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_MAINVIEW_H_
-
-#include <Evas.h>
-#include <ui-gadget.h>
-
-#include "detailview.h"
-#include "permview.h"
-#include "view.h"
-
-namespace WebAppDetailSetting {
-
-class MainView : public View
-{
- struct ui_gadget *m_ug;
- int m_appID;
- Evas_Object *m_subCtnt;
- DPL::ScopedPtr<DetailView> m_detail;
- DPL::ScopedPtr<PermView> m_perm;
- Elm_Object_Item *m_segCtrlDetail;
- Elm_Object_Item *m_segCtrlPerm;
-
- static void onBackBtnClicked(void *data,
- Evas_Object *eo,
- void *event_info);
- static void onSegCtrlChanged(void *data,
- Evas_Object *eo,
- void *event_info);
-
- Evas_Object *createContent(Evas_Object *parent);
- Evas_Object *createCtrlBar(Evas_Object *parent);
-
- public:
- MainView(struct ui_gadget *ug, int appId);
- ~MainView(void);
-
- Evas_Object *loadView(void);
- struct ui_gadget *getUG(void) { return m_ug; }
- Evas_Object *getSubCtnt(void) { return m_subCtnt; }
- Elm_Object_Item *getSegCtrlDetail(void) { return m_segCtrlDetail; }
- Elm_Object_Item *getSegCtrlPerm(void) { return m_segCtrlPerm; }
-};
-
-} /* WebAppDetailSetting */
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_MAINVIEW_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Elementary.h>
-
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <dpl/ace/SettingsLogic.h>
-#include <dpl/foreach.h>
-#include <dpl/assert.h>
-
-#include "permview.h"
-#include "wac_feature.h"
-#include "tizen_feature.h"
-#include "util.h"
-
-namespace WebAppDetailSetting {
-
-void PermView::onFeatureClicked(void */*data*/,
- Evas_Object */*obj*/,
- void *event_info)
-{
- Elm_Object_Item *it;
-
- it = static_cast<Elm_Object_Item*>(event_info);
- Assert(it);
- elm_genlist_item_selected_set(it, EINA_FALSE);
- elm_genlist_item_expanded_set(it, !elm_genlist_item_expanded_get(it));
-}
-
-void PermView::onPermClicked(void *data,
- Evas_Object */*obj*/,
- void *event_info)
-{
- PermData *permData;
- FeatureData *featureData;
- Elm_Object_Item *it;
- Elm_Object_Item *parent_it;
-
- it = static_cast<Elm_Object_Item*>(event_info);
- Assert(it);
- permData = static_cast<PermData *>(data);
- Assert(permData);
- featureData = permData->m_featureData;
- Assert(featureData);
- SettingsLogic::setWidgetDevCapSetting(
- featureData->m_feature->getUri(),
- featureData->m_appID,
- permData->m_type);
- featureData->m_feature->setPerm(
- SettingsLogic::getWidgetDevCapSetting(
- featureData->m_feature->getUri(),
- featureData->m_appID));
- elm_genlist_item_selected_set(it, EINA_FALSE);
- elm_genlist_item_update(it);
- parent_it = elm_genlist_item_parent_get(it);
- if (parent_it)
- elm_genlist_item_update(parent_it);
-}
-
-void PermView::onExpanded(void */*data*/, Evas_Object *obj, void *event_info)
-{
- static Elm_Genlist_Item_Class itc;
- Elm_Object_Item *it;
- Elm_Object_Item *newIt;
- PermData *permData;
- FeatureData *featureData;
-
- Assert(obj && event_info);
- it = static_cast<Elm_Object_Item *>(event_info);
- featureData = static_cast<FeatureData *>(elm_object_item_data_get(it));
- Assert(featureData);
-
- itc.item_style = "dialogue/1text.1icon.2/expandable2";
- itc.func.text_get = getPermStr;
- itc.func.content_get = getPermRadio;
- itc.func.state_get = NULL;
- itc.func.del = delPermData;
-
- try {
- permData = new PermData(featureData, AceDB::PreferenceTypes::PREFERENCE_DENY);
- newIt = elm_genlist_item_append(obj,
- &itc,
- permData,
- it,
- ELM_GENLIST_ITEM_NONE,
- onPermClicked,
- permData);
- if (!newIt)
- delete permData;
-
- permData = new PermData(featureData, AceDB::PreferenceTypes::PREFERENCE_DEFAULT);
- newIt = elm_genlist_item_append(obj,
- &itc,
- permData,
- it,
- ELM_GENLIST_ITEM_NONE,
- onPermClicked,
- permData);
- if (!newIt)
- delete permData;
-
- } catch (const std::bad_alloc &) {
- }
-
-}
-
-void PermView::onContracted(void */*data*/,
- Evas_Object */*obj*/,
- void *event_info)
-{
- Elm_Object_Item *it;
-
- Assert(event_info);
- it = static_cast<Elm_Object_Item *>(event_info);
- elm_genlist_item_subitems_clear(it);
-
-}
-char *PermView::getPermStr(void *data,
- Evas_Object */*obj*/,
- const char */*part*/)
-{
- PermData *permData;
-
- Assert(data);
- permData = static_cast<PermData *>(data);
- switch (permData->m_type) {
- case AceDB::PreferenceTypes::PREFERENCE_DENY:
- /* FIXME: i18n */
- return strdup("Deny");
- case AceDB::PreferenceTypes::PREFERENCE_DEFAULT:
- default:
- /* FIXME: i18n */
- return strdup("Default");
- }
-
- return NULL;
-}
-
-Evas_Object *PermView::getPermRadio(void *data,
- Evas_Object */*obj*/,
- const char */*part*/)
-{
- PermData *permData;
- FeatureData *featureData;
- Evas_Object *radio;
- Evas_Object *radio_grp;
- int type;
-
- Assert(data);
- permData = static_cast<PermData *>(data);
- featureData = permData->m_featureData;
- Assert(featureData);
-
- radio_grp = featureData->m_rg;
- Assert(radio_grp);
- radio = elm_radio_add(radio_grp);
- if (!radio)
- return NULL;
-
- type = static_cast<int>(permData->m_type);
- elm_radio_state_value_set(radio, type);
- elm_radio_group_add(radio, radio_grp);
- if (permData->m_type == featureData->m_feature->getPerm())
- elm_radio_value_set(radio, type);
-
- return radio;
-}
-
-void PermView::delPermData(void *data, Evas_Object */*obj*/)
-{
- PermData *permData;
-
- permData = static_cast<PermData *>(data);
- delete permData;
-}
-
-char *PermView::getFeatureTitle(void */*data*/,
- Evas_Object */*obj*/,
- const char */*part*/)
-{
- const char *title;
-
- /* FIXME: i18n */
- title = "Features";
-
- return strdup(title);
-}
-
-char *PermView::getFeatureStr(void *data,
- Evas_Object */*obj*/,
- const char */*part*/)
-{
- const char *str;
- FeatureData *featureData;
-
- featureData = static_cast<FeatureData *>(data);
- if (!featureData)
- return NULL;
-
- str = featureData->m_feature->getName().c_str();
- if (!str)
- return NULL;
-
- return strdup(str);
-}
-
-char *PermView::getFeatureStrWithPerm(void *data,
- Evas_Object */*obj*/,
- const char *part)
-{
- const char *str;
- FeatureData *featureData;
-
- featureData = static_cast<FeatureData *>(data);
- if (!featureData)
- return NULL;
-
- str = NULL;
- if (!strcmp(part, "elm.text.1")) {
- str = featureData->m_feature->getName().c_str();
- } else if (!strcmp(part, "elm.text.2")) {
-
- switch (featureData->m_feature->getPerm()) {
- case AceDB::PreferenceTypes::PREFERENCE_DENY:
- /* FIXME: i18n */
- str = "Deny";
- break;
- case AceDB::PreferenceTypes::PREFERENCE_DEFAULT:
- default:
- /* FIXME: i18n */
- str = "Default";
- break;
- }
- }
-
- if (!str)
- return NULL;
-
- return strdup(str);
-}
-
-void PermView::delFeatureData(void *data, Evas_Object */*obj*/)
-{
- FeatureData *featureData;
-
- featureData = static_cast<FeatureData *>(data);
- if (featureData) {
- if (featureData->m_rg)
- evas_object_del(featureData->m_rg);
- delete featureData;
- }
-}
-
-char *PermView::getUriTitle(void */*data*/,
- Evas_Object */*obj*/,
- const char */*part*/)
-{
- const char *title;
-
- /* FIXME: i18n */
- title = "URI";
-
- return strdup(title);
-}
-
-char *PermView::getUriStr(void *data,
- Evas_Object */*obj*/,
- const char */*part*/)
-{
- const char *str;
- UriData *uriData;
-
- uriData = static_cast<UriData *>(data);
- if (!uriData)
- return NULL;
-
- str = uriData->m_uri.c_str();
- if (!str)
- return NULL;
-
- return strdup(str);
-}
-
-void PermView::delUriData(void *data, Evas_Object */*obj*/)
-{
- UriData *uriData;
-
- uriData = static_cast<UriData*>(data);
- delete uriData;
-}
-
-void PermView::addFeatureTitle(Evas_Object *gl)
-{
- static Elm_Genlist_Item_Class itc;
-
- Assert(gl);
- itc.item_style = "dialogue/title";
- itc.func.text_get = getFeatureTitle;
- itc.func.content_get = NULL;
- itc.func.state_get = NULL;
- itc.func.del = NULL;
- elm_genlist_item_append(gl,
- &itc,
- NULL,
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
-}
-
-void PermView::addFeatureWithPerm(Evas_Object *gl, int idx)
-{
- static Elm_Genlist_Item_Class itc;
- FeatureData *featureData;
- Elm_Object_Item *it;
- Evas_Object *rg;
-
- Assert(gl);
- itc.item_style = "dialogue/2text.3/expandable";
- itc.func.text_get = getFeatureStrWithPerm;
- itc.func.content_get = NULL;
- itc.func.state_get = NULL;
- itc.func.del = delFeatureData;
-
- rg = elm_radio_add(gl);
- if (!rg)
- return;
-
- try {
- featureData = new FeatureData(&m_featureMap[idx], m_appID, rg);
- it = elm_genlist_item_append(gl,
- &itc,
- static_cast<void *>(featureData),
- NULL,
- ELM_GENLIST_ITEM_SUBITEMS,
- onFeatureClicked,
- NULL);
- if (!it) {
- delete featureData;
- return;
- }
- } catch (const std::bad_alloc &) {
- evas_object_del(rg);
- }
-}
-
-void PermView::addFeature(Evas_Object *gl, int idx)
-{
- static Elm_Genlist_Item_Class itc;
- FeatureData *featureData;
- Elm_Object_Item *it;
-
- Assert(gl);
- itc.item_style = "dialogue/1text";
- itc.func.text_get = getFeatureStr;
- itc.func.content_get = NULL;
- itc.func.state_get = NULL;
- itc.func.del = delFeatureData;
-
- try {
- featureData = new FeatureData(&m_featureMap[idx], m_appID);
- it = elm_genlist_item_append(gl,
- &itc,
- static_cast<void *>(featureData),
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
- if (!it) {
- delete featureData;
- return;
- }
- elm_genlist_item_display_only_set(it, EINA_TRUE);
- } catch (const std::bad_alloc &) {
- }
-}
-
-void PermView::addFeatureList(Evas_Object *gl)
-{
- std::map<int, Feature>::iterator it;
-
- if (m_featureMap.empty())
- return;
-
- addFeatureTitle(gl);
- switch (m_appType) {
- case WrtDB::APP_TYPE_WAC10:
- case WrtDB::APP_TYPE_WAC20:
- for (it = m_featureMap.begin(); it != m_featureMap.end(); it++)
- addFeatureWithPerm(gl, it->first);
- break;
- case WrtDB::APP_TYPE_TIZENWEBAPP:
- for (it = m_featureMap.begin(); it != m_featureMap.end(); it++)
- addFeature(gl, it->first);
- break;
- default:
- break;
- }
-
- evas_object_smart_callback_add(gl, "expanded", onExpanded, NULL);
- evas_object_smart_callback_add(gl, "contracted", onContracted, NULL);
-}
-
-void PermView::addUriTitle(Evas_Object *gl)
-{
- static Elm_Genlist_Item_Class itc;
-
- Assert(gl);
- itc.item_style = "dialogue/title";
- itc.func.text_get = getUriTitle;
- itc.func.content_get = NULL;
- itc.func.state_get = NULL;
- itc.func.del = NULL;
- elm_genlist_item_append(gl,
- &itc,
- NULL,
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
-}
-
-void PermView::addUri(Evas_Object *gl, DPL::String &uri)
-{
- UriData *uriData;
- static Elm_Genlist_Item_Class itc;
- Elm_Object_Item *it;
-
- Assert(gl);
- itc.item_style = "dialogue/1text";
- itc.func.text_get = getUriStr;
- itc.func.content_get = NULL;
- itc.func.state_get = NULL;
- itc.func.del = delUriData;
-
- try {
- uriData = new UriData(DPL::ToUTF8String(uri));
- it = elm_genlist_item_append(gl,
- &itc,
- static_cast<void *>(uriData),
- NULL,
- ELM_GENLIST_ITEM_NONE,
- NULL,
- NULL);
- if (!it) {
- delete uriData;
- return;
- }
- elm_genlist_item_display_only_set(it, EINA_TRUE);
- } catch (const std::bad_alloc &) {
- }
-}
-
-void PermView::addAccessInfo(Evas_Object *gl)
-{
- if (m_accessInfo.empty())
- return;
-
- addUriTitle(gl);
- FOREACH(accessInfo, m_accessInfo)
- addUri(gl, accessInfo->strIRI);
-}
-
-Evas_Object *PermView::createContent(Evas_Object *parent)
-{
- Evas_Object *eo;
-
- Assert(parent);
- if (m_featureMap.empty() && m_accessInfo.empty()) {
- eo = elm_nocontents_add(parent);
- if (!eo)
- return NULL;
- elm_nocontents_label_set(eo, D_("IDS_COM_BODY_NO_CONTENTS"));
- return eo;
- }
-
- eo = elm_genlist_add(parent);
- if (!eo)
- return NULL;
-
- addFeatureList(eo);
- addAccessInfo(eo);
-
- return eo;
-}
-
-Evas_Object *PermView::loadView(void)
-{
- Evas_Object *ctnt;
- WrtDB::DbWidgetFeatureSet features;
-
- resetBase();
-
- try {
- m_dao.Reset(new WrtDB::WidgetDAO(m_appID));
- features = m_dao->getFeaturesList();
- m_appType = m_dao->getWidgetType().appType;
- switch (m_appType) {
- case WrtDB::APP_TYPE_WAC10:
- case WrtDB::APP_TYPE_WAC20:
- m_featureMap = WacFeature::getFeatureMap(features, m_appID);
- break;
- case WrtDB::APP_TYPE_TIZENWEBAPP:
- m_featureMap = TizenFeature::getFeatureMap(features);
- break;
- default:
- break;
- }
- m_dao->getWidgetAccessInfo(m_accessInfo);
-
- ctnt = createContent(m_parent);
- if (!ctnt)
- return NULL;
- resetBase(ctnt);
-
- return ctnt;
-
- } catch (const std::bad_alloc &) {
- return NULL;
- }
-}
-
-PermView::PermView(Evas_Object *parent, int appID) :
- m_parent(parent),
- m_appType(WrtDB::APP_TYPE_UNKNOWN),
- m_appID(appID)
-{
- m_dao.Reset();
- m_featureMap.clear();
- m_accessInfo.clear();
-}
-
-PermView::~PermView(void)
-{
-}
-
-} /* WebAppDetailSetting */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_PERMVIEW_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_PERMVIEW_H_
-
-#include <Evas.h>
-
-#include <dpl/wrt-dao-rw/widget_dao.h>
-
-#include "view.h"
-#include "feature.h"
-
-namespace WebAppDetailSetting {
-
-class PermView : public View
-{
- Evas_Object *m_parent;
- WrtDB::AppType m_appType;
- int m_appID;
- DPL::ScopedPtr<WrtDB::WidgetDAO> m_dao;
- std::map<int, Feature> m_featureMap;
- WrtDB::WidgetAccessInfoList m_accessInfo;
-
- /* Smart callbacks */
- static void onFeatureClicked(void *data,
- Evas_Object *obj,
- void *event_info);
- static void onPermClicked(void *data, Evas_Object *obj, void *event_info);
- static void onExpanded(void *data, Evas_Object *obj, void *event_info);
- static void onContracted(void *data, Evas_Object *obj, void *event_info);
-
- /* Genlist item callbacks */
- static char *getPermStr(void *data, Evas_Object *obj, const char *part);
- static Evas_Object *getPermRadio(void *data,
- Evas_Object *obj,
- const char *part);
- static void delPermData(void *data, Evas_Object *obj);
- static char *getFeatureTitle(void *data, Evas_Object *obj, const char *part);
- static char *getFeatureStr(void *data, Evas_Object *obj, const char *part);
- static char *getFeatureStrWithPerm(void *data,
- Evas_Object *obj,
- const char *part);
- static void delFeatureData(void *data, Evas_Object *obj);
- static char *getUriTitle(void *data, Evas_Object *obj, const char *part);
- static char *getUriStr(void *data, Evas_Object *obj, const char *part);
- static void delUriData(void *data, Evas_Object *obj);
-
- void addFeatureTitle(Evas_Object *gl);
- void addFeature(Evas_Object *gl, int idx);
- void addFeatureWithPerm(Evas_Object *gl, int idx);
- void addFeatureList(Evas_Object *gl);
- void addUriTitle(Evas_Object *gl);
- void addUri(Evas_Object *gl, DPL::String &uri);
- void addAccessInfo(Evas_Object *gl);
- Evas_Object *createContent(Evas_Object *parent);
-
- public:
- PermView(Evas_Object *parent, int appID);
- ~PermView(void);
-
- Evas_Object *loadView(void);
-
-};
-
-class FeatureData
-{
- public:
- Feature *m_feature;
- Evas_Object *m_rg;
- int m_appID;
-
- FeatureData(Feature *feature, int appID, Evas_Object *rg = NULL) :
- m_feature(feature),
- m_rg(rg),
- m_appID(appID) { };
-};
-
-class PermData
-{
- public:
- FeatureData *m_featureData;
- AceDB::PreferenceTypes m_type;
-
- PermData(FeatureData *featureData, AceDB::PreferenceTypes type) :
- m_featureData(featureData),
- m_type(type) { };
-};
-
-class UriData
-{
- public:
- std::string m_uri;
-
- UriData(std::string uri) :
- m_uri(uri) { };
-};
-
-} /* WebAppDetailSetting */
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_PERMVIEW_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <dpl/foreach.h>
-
-#include "tizen_feature.h"
-#include "util.h"
-
-namespace WebAppDetailSetting {
-
-const char *TizenFeature::m_feature[] = {
- "http://tizen.org/api/application",
- "http://tizen.org/api/time",
- "http://tizen.org/api/contact",
- "http://tizen.org/api/calendar",
- "http://tizen.org/api/call",
- "http://tizen.org/api/messaging",
- "http://tizen.org/api/bluetooth",
- "http://tizen.org/api/geocoder",
- "http://tizen.org/api/nfc",
- "http://tizen.org/api/sensors",
- "http://tizen.org/api/systeminfo",
-};
-
-/* FIXME: i18n */
-const char *TizenFeature::m_featureName[] = {
- N_("Installed application"),
- N_("Timezone"),
- N_("Contacts"),
- N_("Calendar"),
- N_("Call Log"),
- N_("Messaging"),
- N_("Bluetooth"),
- N_("Geocoder"),
- N_("NFC"),
- N_("Sensor"),
- N_("System infomation"),
-};
-
-std::map<int, Feature> TizenFeature::getFeatureMap(
- WrtDB::DbWidgetFeatureSet &features)
-{
- std::string uri;
- std::map<int, Feature> featureMap;
- unsigned int i;
-
- FOREACH(feature, features) {
- for (i = 0; i < sizeof(m_feature) / sizeof(*m_feature); i++) {
- if (featureMap.find(i) != featureMap.end())
- continue;
-
- uri = DPL::ToUTF8String(feature->name);
- if (!uri.compare(0,
- strlen(m_feature[i]),
- m_feature[i])) {
- featureMap[i] = Feature(m_featureName[i],
- uri.c_str());
- break;
- }
- }
- }
-
- return featureMap;
-}
-
-} /* WebAppDetailSetting */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_TIZEN_FEATURE_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_TIZEN_FEATURE_H_
-
-#include <dpl/wrt-dao-rw/widget_dao.h>
-
-#include "feature.h"
-
-namespace WebAppDetailSetting {
-
-enum tizenFeature {
- TIZEN_FEATURE_APP = 0x00,
- TIZEN_FEATURE_TIME,
- TIZEN_FEATURE_CONTACTS,
- TIZEN_FEATURE_CALENDAR,
- TIZEN_FEATURE_CALL,
- TIZEN_FEATURE_MESSAGING,
- TIZEN_FEATURE_BLUETOOTH,
- TIZEN_FEATURE_GEOCODER,
- TIZEN_FEATURE_NFC,
- TIZEN_FEATURE_SENSOR,
- TIZEN_FEATURE_SYSTEMINFO,
- TIZEN_FEATURE_MAX,
-};
-
-class TizenFeature
-{
- static const char *m_feature[];
- static const char *m_featureName[];
- public:
- static std::map<int, Feature> getFeatureMap(
- WrtDB::DbWidgetFeatureSet &features);
-};
-
-} /* WebAppDetailSetting */
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_TIZEN_FEATURE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <malloc.h>
-#include <ui-gadget.h>
-#include <ui-gadget-module.h>
-#include <string.h>
-#include <Elementary.h>
-#include <bundle.h>
-
-#undef None
-#include <dpl/wrt-dao-ro/WrtDatabase.h>
-#include <dpl/ace-dao-ro/AceDAOReadOnly.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-
-#include "mainview.h"
-
-#define EXPORT_SYMBOL extern "C" __attribute__((visibility("default")))
-
-struct priv {
- WebAppDetailSetting::MainView *mainView;
-};
-
-static void *onCreate(struct ui_gadget *ug,
- enum ug_mode /*mode*/,
- bundle *data,
- void *user_data)
-{
- struct priv *priv;
- int appID;
- const char *pkgname;
-
- Assert(ug && user_data);
- priv = static_cast<struct priv *>(user_data);
-
- pkgname = bundle_get_val(data, "pkg_name");
- if (!pkgname)
- return NULL;
-
- appID = static_cast<int>
- (WrtDB::WidgetDAOReadOnly::getHandle(DPL::FromASCIIString
- (std::string(pkgname))));
-
- /* Create MainView */
- try {
- priv->mainView = new WebAppDetailSetting::MainView(ug, appID);
- return priv->mainView->loadView();
- } catch (const std::bad_alloc &) {
- return NULL;
- }
-}
-
-static void onDestroy(struct ui_gadget */*ug*/,
- bundle */*data*/,
- void *user_data)
-{
- struct priv *priv;
-
- Assert(user_data);
- priv = static_cast<struct priv *>(user_data);
- delete priv->mainView;
- priv->mainView = NULL;
-}
-
-EXPORT_SYMBOL int UG_MODULE_INIT(struct ug_module_ops *ops)
-{
- struct priv *priv;
-
- Assert(ops);
- priv = static_cast<struct priv *>(calloc(1, sizeof(*priv)));
- if (!priv)
- return -1;
-
- WrtDB::WrtDatabase::attachToThread();
- AceDB::AceDAOReadOnly::attachToThread();
-
- memset(ops, 0x00, sizeof(*ops));
- ops->priv = priv;
- ops->create = onCreate;
- ops->destroy = onDestroy;
- ops->opt = UG_OPT_INDICATOR_ENABLE;
-
- return 0;
-}
-
-EXPORT_SYMBOL void UG_MODULE_EXIT(struct ug_module_ops *ops)
-{
- struct priv *priv;
-
- Assert(ops);
- priv = static_cast<struct priv *>(ops->priv);
- if (priv->mainView)
- delete priv->mainView;
- free(priv);
-
- AceDB::AceDAOReadOnly::detachFromThread();
- WrtDB::WrtDatabase::detachFromThread();
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_UTIL_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_UTIL_H_
-
-#include <libintl.h>
-
-#define D_(str) dgettext("sys_string", str)
-#define gettext_noop(str) (str)
-#define N_(str) gettext_noop(str)
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_UTIL_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include <Evas.h>
-#include <dpl/assert.h>
-#include "view.h"
-
-namespace WebAppDetailSetting {
-
-void delCb(void *data,
- Evas */*e*/,
- Evas_Object */*eo*/,
- void */*event_info*/)
-{
- View *v;
-
- v = static_cast<View *>(data);
- Assert(v);
- v->onDel();
- v->resetBase();
-}
-
-void showCb(void *data,
- Evas */*e*/,
- Evas_Object */*eo*/,
- void */*event_info*/)
-{
- View *v;
-
- v = static_cast<View *>(data);
- Assert(v);
- v->onShow();
-}
-
-void hideCb(void *data,
- Evas */*e*/,
- Evas_Object */*eo*/,
- void */*event_info*/)
-{
- View *v;
-
- v = static_cast<View *>(data);
- Assert(v);
- v->onHide();
-}
-
-void View::resetBase(Evas_Object *base)
-{
- if (m_base) {
- evas_object_event_callback_del_full(m_base, EVAS_CALLBACK_DEL, delCb, this);
- evas_object_event_callback_del_full(m_base, EVAS_CALLBACK_SHOW, showCb, this);
- evas_object_event_callback_del_full(m_base, EVAS_CALLBACK_HIDE, hideCb, this);
- }
-
- m_base = base;
-
- if (m_base) {
- evas_object_event_callback_add(base, EVAS_CALLBACK_DEL, delCb, this);
- evas_object_event_callback_add(base, EVAS_CALLBACK_SHOW, showCb, this);
- evas_object_event_callback_add(base, EVAS_CALLBACK_HIDE, hideCb, this);
- }
-}
-
-View::~View(void)
-{
- if (m_base) {
- evas_object_event_callback_del_full(m_base, EVAS_CALLBACK_DEL, delCb, this);
- evas_object_event_callback_del_full(m_base, EVAS_CALLBACK_SHOW, showCb, this);
- evas_object_event_callback_del_full(m_base, EVAS_CALLBACK_HIDE, hideCb, this);
- evas_object_del(m_base);
- }
-}
-
-} /* WebAppDetailSetting */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_VIEW_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_VIEW_H_
-
-#include <Evas.h>
-
-namespace WebAppDetailSetting {
-class View
-{
- Evas_Object *m_base;
-
- public:
- View(void) : m_base(NULL) { };
- ~View(void);
-
- void resetBase(Evas_Object *base = NULL);
- Evas_Object *getBase(void) { return m_base; }
- virtual void onShow(void) { };
- virtual void onHide(void) { };
- virtual void onDel(void) { };
-};
-
-} /* WebAppDetailSetting */
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_VIEW_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-
-#include <dpl/foreach.h>
-#include <dpl/ace/SettingsLogic.h>
-
-#include "wac_feature.h"
-#include "util.h"
-
-namespace WebAppDetailSetting {
-
-const char *WacFeature::m_feature[] = {
- "http://wacapps.net/api/accelerometer",
- "http://wacapps.net/api/orientation",
- "http://wacapps.net/api/camera",
- "http://wacapps.net/api/devicestatus",
- "http://wacapps.net/api/filesystem",
- "http://wacapps.net/api/messaging",
- "http://www.w3.org/TR/geolocation-API/",
- "http://wacapps.net/api/pim.contact",
- "http://wacapps.net/api/pim.calendar",
- "http://wacapps.net/api/pim.task",
- "http://wacapps.net/api/deviceinteraction",
-};
-
-/* FIXME: i18n */
-const char *WacFeature::m_featureName[] = {
- N_("Accelerometer"),
- N_("Rotation"),
- N_("Camera"),
- N_("Device status"),
- N_("File system"),
- N_("Messaging"),
- N_("Location"),
- N_("Contacts"),
- N_("Calendar"),
- N_("Task"),
- N_("Device interaction"),
-};
-
-std::map<int, Feature> WacFeature::getFeatureMap(
- WrtDB::DbWidgetFeatureSet &features,
- int appID)
-{
- std::string uri;
- std::map<int, Feature> featureMap;
- unsigned int i;
-
- FOREACH(feature, features) {
- for (i = 0; i < sizeof(m_feature) / sizeof(*m_feature); i++) {
- if (featureMap.find(i) != featureMap.end())
- continue;
-
- uri = DPL::ToUTF8String(feature->name);
- if (!uri.compare(0,
- strlen(m_feature[i]),
- m_feature[i])) {
- featureMap[i] = Feature(m_featureName[i],
- m_feature[i]);
-
- featureMap[i].setPerm(
- SettingsLogic::getWidgetDevCapSetting(
- m_feature[i], appID));
-
- break;
- }
- }
- }
-
- return featureMap;
-}
-
-} /* WebAppDetailSetting */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WEB_SRC_SETTING_WEBAPP_DETAIL_WAC_FEATURE_H_
-#define WEB_SRC_SETTING_WEBAPP_DETAIL_WAC_FEATURE_H_
-
-#include <dpl/wrt-dao-rw/widget_dao.h>
-
-#include "feature.h"
-
-namespace WebAppDetailSetting {
-
-enum wacFeature {
- WAC_FEATURE_ACCELEROMETER = 0x00,
- WAC_FEATURE_ORIENTATION,
- WAC_FEATURE_CAMERA,
- WAC_FEATURE_DEV_STAT,
- WAC_FEATURE_FILE_SYSTEM,
- WAC_FEATURE_MESSAGING,
- WAC_FEATURE_GEOLOCATION,
- WAC_FEATURE_CONTACTS,
- WAC_FEATURE_CALENDAR,
- WAC_FEATURE_TASK,
- WAC_FEATURE_DEV_INTERATION,
- WAC_FEATURE_MAX,
-};
-
-class WacFeature
-{
- static const char *m_feature[];
- static const char *m_featureName[];
- public:
- static std::map<int, Feature> getFeatureMap(
- WrtDB::DbWidgetFeatureSet &features,
- int appID);
-};
-
-} /* WebAppDetailSetting */
-
-#endif /* WEB_SRC_SETTING_WEBAPP_DETAIL_WAC_FEATURE_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_state_property.cpp
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 0.1
- * @brief
- */
-
-#include "widget_state_property.h"
-
-WidgetStateProperty::WidgetStateProperty(DPL::Event::Model *model,
- const WrtSharedObjectPtr& sharedObject,
- WidgetHandle handle,
- WidgetState state) :
- Base(model),
- m_sharedObject(sharedObject),
- m_handle(handle)
-{
- // set up default value
- Set(state);
-
- // register value changed
- m_sharedObject->AddListener<WrtSharedObject::WIDGET_ENTRIES,
- WidgetDataArray>(this);
-}
-
-WidgetStateProperty::~WidgetStateProperty()
-{
- // deregister
- m_sharedObject->RemoveListener<WrtSharedObject::WIDGET_ENTRIES,
- WidgetDataArray>(this);
- m_sharedObject->RemoveWidgetData(m_handle);
-}
-
-void WidgetStateProperty::Set(const WidgetState &value)
-{
- m_sharedObject->ChangeWidgetState(m_handle, value);
-}
-
-WidgetState WidgetStateProperty::Get() const
-{
- return m_sharedObject->GetWidgetState(m_handle);
-}
-
-void WidgetStateProperty::ValueChanged(size_t propertyEnum,
- const WidgetDataArray& /*value*/,
- const void* info)
-{
- Assert(WrtSharedObject::WIDGET_ENTRIES == propertyEnum &&
- "Unexpected property notification");
-
- if (info) {
- const WidgetDataChange& change = *static_cast<const WidgetDataChange*>(
- info);
-
- // do not notify about widget removal
- if (change.data.handle == m_handle && !change.removed) {
- EmitEvent(EventType(change.data.state, this->m_model),
- DPL::EmitMode::Auto);
- }
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file widget_state_property.h
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 0.1
- * @brief
- */
-
-#ifndef WRT_SRC_SHAREDDATA_WIDGET_STATE_PROPERTY_H_
-#define WRT_SRC_SHAREDDATA_WIDGET_STATE_PROPERTY_H_
-
-#include <dpl/event/property.h>
-#include "wrt_shared_object.h"
-
-/*
- * Internally WidgetStateProperty is bound to a WrtSharedObject::WIDGET_ENTRIES
- * array in shared object just like SharedProperty. However, it can only modify
- * one specific widget data array element defined by widget handle. It also
- * reacts on changes of this particular widget entry state. As a result, it can
- * be used just like it was actually bound to a shared widget state.
- */
-class WidgetStateProperty :
- public DPL::Event::Property<WidgetState,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamic>,
- public DPL::ISharedObjectListener<WrtSharedObject::WIDGET_ENTRIES,
- WidgetDataArray>
-{
- public:
- typedef DPL::PropertyEvent<WidgetState> EventType;
-
- WidgetStateProperty(DPL::Event::Model *model,
- const WrtSharedObjectPtr& sharedObject,
- WidgetHandle handle,
- WidgetState state = WidgetState_Stopped);
-
- ~WidgetStateProperty();
-
- virtual void Set(const WidgetState &value);
- virtual WidgetState Get() const;
-
- protected:
- // notify property listeners
- virtual void ValueChanged(size_t propertyEnum,
- const WidgetDataArray &value,
- const void* info);
-
- private:
- typedef DPL::Event::Property<WidgetState,
- DPL::Event::PropertyReadWrite,
- DPL::Event::PropertyStorageDynamic> Base;
-
- WrtSharedObjectPtr m_sharedObject;
- WidgetHandle m_handle;
-};
-
-#endif /* WRT_SRC_SHAREDDATA_WIDGET_STATE_PROPERTY_H_ */
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- *
- *
- * @file wrt_shared_object.cpp
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 0.1
- * @brief
- */
-
-#include "wrt_shared_object.h"
-#include <cstring>
-
-namespace {
-const size_t WRT_SHARED_OBJECT_VERSION = 1;
-const size_t WRT_SHARED_OBJECT_MAGIC_NUMBER = 666;
-const std::string WRT_MSG_QUEUE_PREFIX =
- "/wrt_engine_shared_object_msg_queue_";
-const DPL::SharedMemory::Key SHM_KEY = 12345;
-const char* SEM_NAME = "/wrt_engine_shared_object_semaphore";
-}
-
-WrtSharedObjectPtr WrtSharedObject::Create()
-{
- return DPL::SharedObjectFactory<WrtSharedObject>::Create(SHM_KEY, SEM_NAME);
-}
-
-void WrtSharedObject::RemoveWidgetData(WidgetHandle handle)
-{
- Assert(INVALID_WIDGET_HANDLE != handle && "Invalid widget handle");
-
- ScopedFlaggedLock lock(*this);
-
- size_t count = PropertyRef<WIDGET_COUNT, size_t>();
- WidgetDataArray array;
- memcpy(array, PropertyRef<WIDGET_ENTRIES, WidgetDataArray>(), sizeof(array));
-
- size_t processed = 0;
- size_t i = 0;
- for (; i < MAX_WIDGETS && processed < count; ++i) {
- if (INVALID_WIDGET_HANDLE == array[i].handle) {
- continue;
- }
-
- processed++;
- if (array[i].handle == handle) {
- // TODO any additional logic? Can we always remove it
-
- // reset widget data in shm
- array[i].handle = INVALID_WIDGET_HANDLE;
- SetPropertyInternal<WIDGET_COUNT>(count - 1);
-
- WidgetDataChange change(handle, WidgetState_Stopped, true);
- SetPropertyInternal<WIDGET_ENTRIES>(array, &change);
-
- LogDebug(
- "Widget data removed from shared memory. Widget handle: " <<
- handle << " idx: " << i);
- return;
- }
- }
- LogWarning("Widget handle not found. No data removed");
-}
-
-void WrtSharedObject::ChangeWidgetState(WidgetHandle handle,
- WidgetState state)
-{
- Assert(INVALID_WIDGET_HANDLE != handle && "Invalid widget handle");
-
- ScopedFlaggedLock lock(*this);
-
- size_t count = PropertyRef<WIDGET_COUNT, size_t>();
- WidgetDataArray array;
- memcpy(array, PropertyRef<WIDGET_ENTRIES, WidgetDataArray>(), sizeof(array));
-
- size_t processed = 0;
- size_t i = 0;
- size_t firstFree = MAX_WIDGETS;
- size_t match = MAX_WIDGETS;
- for (; i < MAX_WIDGETS && processed < count; ++i) {
- if (INVALID_WIDGET_HANDLE != array[i].handle) {
- processed++;
- if (array[i].handle == handle) {
- match = i;
- break;
- }
- } else if (MAX_WIDGETS == firstFree) {
- // remember first free slot just in case
- firstFree = i;
- }
- }
-
- // not found
- if (MAX_WIDGETS == match) {
- if (MAX_WIDGETS == firstFree) {
- // all slots taken, take another one
- if (count < MAX_WIDGETS && processed == count) {
- firstFree = count;
- } else {
- LogError("Maximum number of widget entries reached");
- ThrowMsg(Exception::MaxWidgetsReached,
- "Maximum number of widget entries reached");
- }
- }
-
- // add new entry
- array[firstFree].handle = handle;
- array[firstFree].state = state;
- SetPropertyInternal<WIDGET_COUNT>(count + 1);
- }
- // widget entry found
- else {
- // TODO conditional widget state logic
- // Throw Exception::StateChangeFailed if state can't be changed
-
- array[match].state = state;
- }
- // add changed widget idx as additional info
- WidgetDataChange change(handle, state, false);
- SetPropertyInternal<WIDGET_ENTRIES>(array, &change);
-}
-
-WidgetState WrtSharedObject::GetWidgetState(WidgetHandle handle) const
-{
- ScopedFlaggedLock lock(*this);
-
- size_t count = PropertyRef<WIDGET_COUNT, size_t>();
- WidgetDataArray array;
- memcpy(array, PropertyRef<WIDGET_ENTRIES, WidgetDataArray>(), sizeof(array));
-
- size_t processed = 0;
- size_t i = 0;
- for (; i < MAX_WIDGETS && processed < count; ++i) {
- if (INVALID_WIDGET_HANDLE != array[i].handle) {
- processed++;
- if (array[i].handle == handle) {
- return array[i].state;
- }
- }
- }
-
- LogError("Widget " << handle << " has not been found");
- ThrowMsg(Exception::WidgetNotFound, "Widget has not been found");
-}
-
-void WrtSharedObject::Init()
-{
- // TODO read settings from database
- SetPropertyInternal<PARENTAL_MODE>(false);
-}
-
-WrtSharedObject::MagicType WrtSharedObject::GetMagicNumber() const
-{
- return WRT_SHARED_OBJECT_MAGIC_NUMBER;
-}
-
-WrtSharedObject::VersionType WrtSharedObject::GetVersion() const
-{
- return WRT_SHARED_OBJECT_VERSION;
-}
-
-std::string WrtSharedObject::GetMsgQueuePrefix() const
-{
- return WRT_MSG_QUEUE_PREFIX;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- *
- *
- * @file wrt_shared_object.h
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 0.1
- * @brief
- */
-
-#ifndef WRT_SRC_SHAREDDATA_WRTSHAREDOBJECT_H_
-#define WRT_SRC_SHAREDDATA_WRTSHAREDOBJECT_H_
-
-#include <dpl/shared_object.h>
-#include <dpl/shared_ptr.h>
-#include "widget_data_types.h"
-#include "wrt_plugin_export.h"
-
-namespace {
-const size_t WRT_MAX_WIDGET_COUNT = 64;
-} // anonymous
-
-struct WidgetData
-{
- WidgetData() : handle(INVALID_WIDGET_HANDLE),
- state(WidgetState_Stopped)
- {
- }
-
- WidgetData(WidgetHandle widgetHandle,
- WidgetState widgetState) :
- handle(widgetHandle),
- state(widgetState)
- {
- }
-
- WidgetHandle handle;
- WidgetState state;
-};
-
-struct WidgetDataChange
-{
- WidgetDataChange(WidgetHandle widgetHandle,
- WidgetState widgetState,
- bool isRemoved) :
- data(widgetHandle, widgetState),
- removed(isRemoved)
- {
- }
-
- WidgetData data;
- bool removed;
-};
-
-typedef WidgetData WidgetDataArray[WRT_MAX_WIDGET_COUNT];
-
-// TODO Add remaining types to the list
-typedef DPL::TypeListDecl<size_t, // number of widget entries
- WidgetDataArray, // widget handles and states
- bool // parental mode
- >::Type SharedTypeList;
-
-class WrtSharedObject;
-typedef DPL::SharedPtr<WrtSharedObject> WrtSharedObjectPtr;
-
-/*
- *
- */
-class WrtSharedObject : public DPL::SharedObject<SharedTypeList>
-{
- public:
- class Exception
- {
- public:
- DECLARE_EXCEPTION_TYPE(DPL::Exception, Base)
- DECLARE_EXCEPTION_TYPE(Base, MaxWidgetsReached)
- DECLARE_EXCEPTION_TYPE(Base, StateChangeFailed)
- DECLARE_EXCEPTION_TYPE(Base, WidgetNotFound)
- };
-
- /*
- * Property enum values. The order of enums should correspond with
- * the order of types in ShareTypeList
- */
- enum
- {
- WIDGET_COUNT = 0,
- WIDGET_ENTRIES,
- PARENTAL_MODE
- };
-
- static const size_t MAX_WIDGETS = sizeof(WidgetDataArray) /
- sizeof(WidgetData);
-
- static WrtSharedObjectPtr Create();
-
- ~WrtSharedObject()
- {
- }
-
- // Conditional widget state change.
- void ChangeWidgetState(WidgetHandle handle,
- WidgetState state);
-
- // Removes widget data from shm
- void RemoveWidgetData(WidgetHandle handle);
-
- WidgetState GetWidgetState(WidgetHandle handle) const;
-
- protected:
- explicit WrtSharedObject(const std::string& semaphore) :
- DPL::SharedObject<SharedTypeList>(semaphore)
- {
- }
-
- private:
- friend class DPL::SharedObjectFactory<WrtSharedObject>;
-
- virtual void Init();
-
- virtual MagicType GetMagicNumber() const;
-
- virtual VersionType GetVersion() const;
-
- virtual std::string GetMsgQueuePrefix() const;
-};
-
-#endif /* WRT_SRC_SHAREDDATA_WRTSHAREDOBJECT_H_ */
+++ /dev/null
-General purpose utilities
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file FreeLogic.h
- * @author Piotr Kozbial (p.kozbial@samsung.com)
- * @version 1.0
- * @brief Common base for Free Logic classes
- */
-
-#ifndef WRT_UTILS_FREELOGIC_H_
-#define WRT_UTILS_FREELOGIC_H_
-
-#include <dpl/noncopyable.h>
-#include <dpl/mutex.h>
-
-/*
- * This is the base class for any "Free Logic" class.
- *
- * A Free Logic is a bit like a Logic, but the difference is
- * that a Logic is always coupled with a controller and so
- * it is assigned to a single thread, while a Free Logic
- * doesn't have a controller, so it doesn't have a designated
- * thread.
- *
- * A Free Logic's public interface may be directly called
- * from any thread. For this to be safe, every Free Logic must
- * adhere to the following constraints:
- *
- * 1. Every (no matter how trivial) public API function must
- * start with locking the mutex using the following macro:
- *
- * FREE_LOGIC_LOCK
- *
- * 2. A Free Logic cannot contact other Logics, that is,
- * it cannot POST events to controllers and it cannot
- * call methods of other FreeLogics.
- *
- * 3. A Free Logic cannot emit or receive any events.
- *
- * 4. A Free Logic cannot do blocking system calls.
- *
- * 5. A Free Logic cannot use any synchronization
- * mechanisms (except the default lock, as described
- * above).
- */
-class FreeLogic : private DPL::Noncopyable
-{
- protected:
- mutable DPL::Mutex _freeLogicMutex;
-};
-
-#define FREE_LOGIC_LOCK \
- DPL::Mutex::ScopedLock _freeLogicLock(&_freeLogicMutex);
-
-#endif // WRT_UTILS_FREELOGIC_H_
-
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
-# @version 1.0
-# @brief
-#
-
-#
-# Test files
-#
-# Define all WRT tests sources.
-# Runner is responsible for runnint it all and
-# generating proper output files
-#
-
-GET_PROPERTY(COMMON_INCLUDE_DIRS GLOBAL PROPERTY TESTS_INCLUDE_DIRS)
-GET_PROPERTY(COMMON_LIBRARY_DIRS GLOBAL PROPERTY TESTS_LIBRARY_DIRS)
-GET_PROPERTY(COMMON_LIBRARIES GLOBAL PROPERTY TESTS_LIBRARIES)
-
-# Set DPL tests include directory
-SET(WRT_TESTS_INCLUDE_DIR
- ${PROJECT_SOURCE_DIR}/tests/
- ${PROJECT_SOURCE_DIR}/tests/detail/include
- ${COMMON_INCLUDE_DIRS}
-)
-
-SET(WRT_DETAIL_SOURCES
-)
-
-SET(WRT_DETAIL_SOURCES
- ${WRT_DETAIL_SOURCES}
- ${PROJECT_SOURCE_DIR}/tests/detail/efl/loop_control.cpp
-)
-
-#ADD_SUBDIRECTORY(tests_common_lib)
-ADD_SUBDIRECTORY(w3c_tests)
-#ADD_SUBDIRECTORY(warp_tests)
-#ADD_SUBDIRECTORY(engine_tests)
-#ADD_SUBDIRECTORY(dao_tests)
-#ADD_SUBDIRECTORY(ace_client_tests)
-#ADD_SUBDIRECTORY(smack_tests)
-#ADD_SUBDIRECTORY(widget_module_tests)
+++ /dev/null
-!!!options!!! stop
-Test code
+++ /dev/null
-include(FindPkgConfig)
-
-PKG_CHECK_MODULES(ACE_CLIENT_DEPS
- dpl-efl
- REQUIRED
- )
-
-SET(ACE_CLIENT_DIR
- ${PROJECT_SOURCE_DIR}/ace_client
- )
-
-SET(ACE_CLIENT_SRC_DIR
- ${ACE_CLIENT_DIR}/src
- )
-
-SET(ACE_CLIENT_INCLUDE_DIR
- ${ACE_CLIENT_DIR}/include
- )
-
-SET(ACE_CLIENT_SOURCES
- ${PROJECT_SOURCE_DIR}/tests/ace_client_tests/ace_client_tests.cpp
- ${PROJECT_SOURCE_DIR}/tests/ace_client_tests/test_cases.cpp
- ${ACE_CLIENT_SRC_DIR}/ace_client.cpp
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/api/ace_server_api.cpp
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/security_daemon_dbus_config.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/Attribute.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/Serializer.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/NodeFactory.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/Policy.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/Rule.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/Condition.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/Subject.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/simple_roaming_agent.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/common/TreeNode.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/dao/BaseAttribute.cpp
- ${PROJECT_SOURCE_DIR}/src/access-control/logic/attribute_facade.cpp
- ${PROJECT_SOURCE_DIR}/mockups/AceDAOReadOnly_mock.cpp
- ${PROJECT_SOURCE_DIR}/mockups/dbus_client_mock.cpp
- ${PROJECT_SOURCE_DIR}/mockups/widget_dao_read_only_mock.cpp
- ${PROJECT_SOURCE_DIR}/mockups/rpc_client_mock.cpp
- ${PROJECT_SOURCE_DIR}/mockups/PopupInvoker_mock.cpp
- )
-
-SET(ACE_CLIENT_INCLUDES
- ${ACE_CLIENT_DEPS_INCLUDE_DIRS}
- ${ACE_CLIENT_INCLUDE_DIR}
- ${PROJECT_SOURCE_DIR}/src/access-control/common/ # PolicyEffect
- ${PROJECT_SOURCE_DIR}/src/access-control/engine/ # PromptModel
- ${PROJECT_SOURCE_DIR}/mockups/ # Mockups
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/ # Security daemon config
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/api/ # AceServerApi
- ${PROJECT_SOURCE_DIR}/src/rpc/ui-process/ # RPC connection
- ${PROJECT_SOURCE_DIR}/src/common/ # Nested Loop
- ${PROJECT_SOURCE_DIR}/src/access-control/logic/ # attribute_facade
- ${PROJECT_SOURCE_DIR}/src/dbus/ # DBus client
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/ # Security daemon config
- ${PROJECT_SOURCE_DIR}/src/rpc/security-daemon/api/ # AceServerApi
- ${PROJECT_SOURCE_DIR}/src/domain/ # widget_data_types
- ${PROJECT_SOURCE_DIR}/src/common/ # wrt_db_types
- ${PROJECT_SOURCE_DIR}/src/profiling/ # profiling
- ${PROJECT_SOURCE_DIR}/src/access-control/engine/ # PolicyInformationPoint
- )
-
-SET(TARGET_ACE_CLIENT_TEST "wrt-tests-ace-client")
-
-ADD_DEFINITIONS(${ACE_CLIENT_DEPS_CFLAGS})
-ADD_DEFINITIONS(${ACE_CLIENT_CFLAGS_OTHER})
-ADD_DEFINITIONS(-D ACE_CLIENT_TESTS)
-
-INCLUDE_DIRECTORIES(${ACE_CLIENT_INCLUDES})
-
-WRT_TEST_BUILD(${TARGET_ACE_CLIENT_TEST} ${ACE_CLIENT_SOURCES})
-
-WRT_TEST_INSTALL(${TARGET_ACE_CLIENT_TEST})
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file ace_client_tests.cpp
- * @author Tomasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief Main executable file for ACE client tests.
- */
-#include <dpl/log/log.h>
-#include <dpl/test/test_runner.h>
-
-int main(int argc, char *argv[]){
- LogInfo("Starting tests");
- int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
- return status;
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file test_cases.cpp
- * @author Tonasz Swierczek (t.swierczek@samsung.com)
- * @version 1.0
- * @brief Implementation file for ACE client test cases.
- */
-#include <dpl/test/test_runner.h>
-
-#include "ace_client.h"
-#include "widget_dao_read_only_mock.h"
-#include "WrtDatabase_mock.h"
-#include "AceDAOReadOnly_mock.h"
-#include "dbus_client_mock.h"
-#include "PolicyInformationPoint_mock.h"
-#include "rpc_client_mock.h"
-#include "PopupInvoker_mock.h"
-
-namespace {
-
-const char* featureName1 = "feature-1";
-const char* featureName2 = "feature-2";
-const char* devCapName1 = "devCap-1";
-const char* devCapName2 = "devCap-2";
-
-enum class AceTestOptionalCachedPolicyResult {
- UNDETERMINED,
- NOT_APPLICABLE,
- PROMPT_BLANKET,
- PROMPT_SESSION,
- PROMPT_ONESHOT,
- PERMIT,
- DENY,
- NULL_VALUE
-};
-
-enum class AceTestPolicyResult {
- UNDETERMINED,
- NOT_APPLICABLE,
- PROMPT_BLANKET,
- PROMPT_SESSION,
- PROMPT_ONESHOT,
- PERMIT,
- DENY
-};
-
-enum class AceTestOptionalCachedPromptDecision {
- ALLOW_ALWAYS,
- DENY_ALWAYS,
- ALLOW_THIS_TIME,
- DENY_THIS_TIME,
- ALLOW_FOR_SESSION,
- DENY_FOR_SESSION,
- NULL_VALUE
-};
-
-static void configureTest(
- AceTestOptionalCachedPolicyResult cachedPolicyResult,
- AceTestOptionalCachedPromptDecision cachedPromptDecision,
- const std::string& cachedPromptSession,
- AceTestPolicyResult securityDaemonPolicyResult,
- bool popupResponse,
- bool grantDevCaps,
- bool daemonValidation)
-{
- // Cached decision from popups
- switch (cachedPromptDecision) {
- case AceTestOptionalCachedPromptDecision::ALLOW_ALWAYS: {
- CachedPromptDecision decision;
- decision.decision = PromptDecision::ALLOW_ALWAYS;
- decision.session = DPL::FromUTF8String(cachedPromptSession);
- AceDB::AceDAOReadOnly::setPromptDecision(
- OptionalCachedPromptDecision(decision));
- break; }
- case AceTestOptionalCachedPromptDecision::DENY_ALWAYS: {
- CachedPromptDecision decision;
- decision.decision = PromptDecision::DENY_ALWAYS;
- decision.session = DPL::FromUTF8String(cachedPromptSession);
- AceDB::AceDAOReadOnly::setPromptDecision(
- OptionalCachedPromptDecision(decision));
- break; }
- case AceTestOptionalCachedPromptDecision::ALLOW_THIS_TIME: {
- CachedPromptDecision decision;
- decision.decision = PromptDecision::ALLOW_THIS_TIME;
- decision.session = DPL::FromUTF8String(cachedPromptSession);
- AceDB::AceDAOReadOnly::setPromptDecision(
- OptionalCachedPromptDecision(decision));
- break; }
- case AceTestOptionalCachedPromptDecision::DENY_THIS_TIME: {
- CachedPromptDecision decision;
- decision.decision = PromptDecision::DENY_THIS_TIME;
- decision.session = DPL::FromUTF8String(cachedPromptSession);
- AceDB::AceDAOReadOnly::setPromptDecision(
- OptionalCachedPromptDecision(decision));
- break; }
- case AceTestOptionalCachedPromptDecision::ALLOW_FOR_SESSION: {
- CachedPromptDecision decision;
- decision.decision = PromptDecision::ALLOW_FOR_SESSION;
- decision.session = DPL::FromUTF8String(cachedPromptSession);
- AceDB::AceDAOReadOnly::setPromptDecision(
- OptionalCachedPromptDecision(decision));
- break; }
- case AceTestOptionalCachedPromptDecision::DENY_FOR_SESSION: {
- CachedPromptDecision decision;
- decision.decision = PromptDecision::DENY_FOR_SESSION;
- decision.session = DPL::FromUTF8String(cachedPromptSession);
- AceDB::AceDAOReadOnly::setPromptDecision(
- OptionalCachedPromptDecision(decision));
- break; }
- case AceTestOptionalCachedPromptDecision::NULL_VALUE:
- default : {
- AceDB::AceDAOReadOnly::setPromptDecision(
- OptionalCachedPromptDecision());
- break; }
- }
-
- // Daemon response
- switch (securityDaemonPolicyResult) {
- case AceTestPolicyResult::UNDETERMINED: {
- DPL::DBus::Client::setCheckAccessResult(PolicyResult::serialize(
- PolicyResult(PolicyResult::Value::UNDETERMINED)));
- break; }
- case AceTestPolicyResult::NOT_APPLICABLE: {
- DPL::DBus::Client::setCheckAccessResult(PolicyResult::serialize(
- PolicyResult()));
- break; }
- case AceTestPolicyResult::PROMPT_BLANKET: {
- DPL::DBus::Client::setCheckAccessResult(PolicyResult::serialize(
- PolicyResult(PolicyEffect::PROMPT_BLANKET)));
- break; }
- case AceTestPolicyResult::PROMPT_SESSION: {
- DPL::DBus::Client::setCheckAccessResult(PolicyResult::serialize(
- PolicyResult(PolicyEffect::PROMPT_SESSION)));
- break; }
- case AceTestPolicyResult::PROMPT_ONESHOT: {
- DPL::DBus::Client::setCheckAccessResult(PolicyResult::serialize(
- PolicyResult(PolicyEffect::PROMPT_ONESHOT)));
- break; }
- case AceTestPolicyResult::PERMIT: {
- DPL::DBus::Client::setCheckAccessResult(PolicyResult::serialize(
- PolicyResult(PolicyEffect::PERMIT)));
- break; }
- case AceTestPolicyResult::DENY: {
- DPL::DBus::Client::setCheckAccessResult(PolicyResult::serialize(
- PolicyResult(PolicyEffect::DENY)));
- break; }
- default: {
- DPL::DBus::Client::setCheckAccessResult(PolicyResult::serialize(
- PolicyResult()));
- break; }
- }
-
- // Daemon popup answer validation setup
- DPL::DBus::Client::setDaemonValidationResult(daemonValidation);
-
- // Not empty attribute set to be returned
- AceDB::BaseAttributeSet attributeSet;
- AceDB::BaseAttributePtr attribute(new AceDB::BaseAttribute());
- std::string aname = "attribute-subject-name1";
- attribute->setName(&aname);
- attribute->setType(AceDB::BaseAttribute::Type::Subject);
- attributeSet.insert(attribute);
- AceDB::AceDAOReadOnly::setAttributeSet(attributeSet);
-
- // Cached response
- switch (cachedPolicyResult) {
- case AceTestOptionalCachedPolicyResult::UNDETERMINED: {
- AceDB::AceDAOReadOnly::setPolicyResult(OptionalPolicyResult(
- PolicyResult(PolicyResult::Value::UNDETERMINED)));
- break; }
- case AceTestOptionalCachedPolicyResult::NOT_APPLICABLE: {
- AceDB::AceDAOReadOnly::setPolicyResult(
- OptionalPolicyResult(PolicyResult()));
- break; }
- case AceTestOptionalCachedPolicyResult::PROMPT_BLANKET: {
- AceDB::AceDAOReadOnly::setPolicyResult(OptionalPolicyResult(
- PolicyResult(PolicyEffect::PROMPT_BLANKET)));
- break; }
- case AceTestOptionalCachedPolicyResult::PROMPT_SESSION: {
- AceDB::AceDAOReadOnly::setPolicyResult(OptionalPolicyResult(
- PolicyResult(PolicyEffect::PROMPT_SESSION)));
- break; }
- case AceTestOptionalCachedPolicyResult::PROMPT_ONESHOT: {
- AceDB::AceDAOReadOnly::setPolicyResult(OptionalPolicyResult(
- PolicyResult(PolicyEffect::PROMPT_ONESHOT)));
- break; }
- case AceTestOptionalCachedPolicyResult::PERMIT: {
- AceDB::AceDAOReadOnly::setPolicyResult(OptionalPolicyResult(
- PolicyResult(PolicyEffect::PERMIT)));
- break; }
- case AceTestOptionalCachedPolicyResult::DENY: {
- AceDB::AceDAOReadOnly::setPolicyResult(OptionalPolicyResult(
- PolicyResult(PolicyEffect::DENY)));
- break; }
- case AceTestOptionalCachedPolicyResult::NULL_VALUE:
- default: {
- AceDB::AceDAOReadOnly::setPolicyResult(OptionalPolicyResult());
- break; }
- }
-
- static UIProcess::PopupResponse responseTrue(true);
- static UIProcess::PopupResponse responseFalse(false);
-
- // Prompt decisions
- UIProcess::RpcClient::setPopupResponse(
- popupResponse ? responseTrue : responseFalse);
-
- // New prompt decisions (piped PopupInvoker)
- PopupInvoker::setPromptAnswer(Prompt::PromptAnswer(popupResponse,
- Prompt::Validity::ALWAYS));
-
- // Granted smack labels
- std::set<DPL::String> devCapPermissions;
- if (grantDevCaps) {
- devCapPermissions.insert(DPL::FromASCIIString(devCapName1));
- devCapPermissions.insert(DPL::FromASCIIString(devCapName2));
- }
- AceDB::AceDAOReadOnly::setDevCapPermissions(devCapPermissions);
-}
-
-static void fillRequest(AceClient::AceRequest &aceRequest,
- AceClient::AceSessionId sessionId)
-{
- static const char* apiFeature[] = {featureName1, featureName2};
- static const char* devCapNames[] = {devCapName2, devCapName1};
- static AceClient::AceParamList paramList[2];
- static AceClient::AceParam param("param1-name", "param1-value");
-
- paramList[0].count = 1;
- paramList[0].param = ¶m;
- paramList[1].count = 1;
- paramList[1].param = ¶m;
-
- aceRequest.sessionId = sessionId;
- aceRequest.widgetHandle = 0;
- aceRequest.apiFeatures.count = 2;
- aceRequest.apiFeatures.apiFeature = apiFeature;
- aceRequest.functionName = "test-function-name";
- aceRequest.deviceCapabilities.devcapsCount = 2;
- aceRequest.deviceCapabilities.devCapNames = devCapNames;
- aceRequest.deviceCapabilities.paramsCount = 2;
- aceRequest.deviceCapabilities.params = paramList;
-}
-} // namespace
-
-// Tests proper initialization
-RUNNER_TEST(ace_client_test_01_initialization)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- RUNNER_ASSERT(client.isInitialized());
-}
-
-
-// access granted but no smack label given - need to ask security daemon
-// this NEEDS to be first test setting smack, because since we dont have means
-// to delete AceThinClient singleton, we cannot remove granted smack labels
-// from its internatl structures.
-RUNNER_TEST(ace_client_test_02_smack_rules)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PERMIT,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "this-session",
- AceTestPolicyResult::DENY,
- false,
- false,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-// pure security daemon answers
-RUNNER_TEST(ace_client_test_03_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::NULL_VALUE,
- AceTestOptionalCachedPromptDecision::ALLOW_ALWAYS,
- "this-session",
- AceTestPolicyResult::PERMIT,
- true,
- true,
- true);
-
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::NULL_VALUE,
- AceTestOptionalCachedPromptDecision::ALLOW_ALWAYS,
- "this-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
-
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-// cached security daemon response
-RUNNER_TEST(ace_client_test_04_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PERMIT,
- AceTestOptionalCachedPromptDecision::ALLOW_ALWAYS,
- "this-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::DENY,
- AceTestOptionalCachedPromptDecision::ALLOW_ALWAYS,
- "this-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-// cached security daemon response on prompt not existing in cache
-RUNNER_TEST(ace_client_test_05_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_BLANKET,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "this-session",
- AceTestPolicyResult::DENY,
- false,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_BLANKET,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "this-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-}
-
-// cached security daemon response on prompt existing in cache for this session
-RUNNER_TEST(ace_client_test_06_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_BLANKET,
- AceTestOptionalCachedPromptDecision::DENY_FOR_SESSION,
- "this-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_BLANKET,
- AceTestOptionalCachedPromptDecision::ALLOW_FOR_SESSION,
- "this-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-}
-
-// cached security daemon response on prompt existing in cache for another
-// session but decision is 'always'
-RUNNER_TEST(ace_client_test_07_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_BLANKET,
- AceTestOptionalCachedPromptDecision::DENY_ALWAYS,
- "another-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_BLANKET,
- AceTestOptionalCachedPromptDecision::ALLOW_ALWAYS,
- "another-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-}
-
-// cached security daemon response on prompt existing in cache for another
-// session but decision is 'always'
-RUNNER_TEST(ace_client_test_08_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_SESSION,
- AceTestOptionalCachedPromptDecision::DENY_FOR_SESSION,
- "another-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_BLANKET,
- AceTestOptionalCachedPromptDecision::ALLOW_FOR_SESSION,
- "another-session",
- AceTestPolicyResult::PERMIT,
- false,
- false,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-// cached security daemon response on prompt existing in cache
-// for another session - prompt is 'session'
-RUNNER_TEST(ace_client_test_09_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_SESSION,
- AceTestOptionalCachedPromptDecision::DENY_FOR_SESSION,
- "another-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_SESSION,
- AceTestOptionalCachedPromptDecision::ALLOW_FOR_SESSION,
- "another-session",
- AceTestPolicyResult::PERMIT,
- false,
- false,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-
-// cached security daemon response on prompt one shot
-RUNNER_TEST(ace_client_test_10_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_ONESHOT,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "another-session",
- AceTestPolicyResult::PERMIT,
- false,
- false,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_ONESHOT,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "another-session",
- AceTestPolicyResult::DENY,
- true,
- true,
- true);
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-}
-
-// No result in cache - policy returns prompt 'oneshot'
-RUNNER_TEST(ace_client_test_11_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::NULL_VALUE,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "another-session",
- AceTestPolicyResult::PROMPT_ONESHOT,
- false,
- false,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::NULL_VALUE,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "another-session",
- AceTestPolicyResult::PROMPT_ONESHOT,
- true,
- true,
- true);
- RUNNER_ASSERT(client.checkFunctionCall(aceRequest));
-}
-
-// security daemon response is undetermined or inapplicable
-RUNNER_TEST(ace_client_test_12_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::NULL_VALUE,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "another-session",
- AceTestPolicyResult::UNDETERMINED,
- true,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::NULL_VALUE,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "another-session",
- AceTestPolicyResult::NOT_APPLICABLE,
- true,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-// security daemon popup validation response is false (cached policy)
-RUNNER_TEST(ace_client_test_13_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_BLANKET,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "another-session",
- AceTestPolicyResult::UNDETERMINED,
- true,
- false,
- false);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-// security daemon popup validation response is false (no cached policy)
-RUNNER_TEST(ace_client_test_14_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::NULL_VALUE,
- AceTestOptionalCachedPromptDecision::NULL_VALUE,
- "another-session",
- AceTestPolicyResult::PROMPT_BLANKET,
- true,
- false,
- false);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-// few check access last tests
-RUNNER_TEST(ace_client_test_15_check_access)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceRequest aceRequest;
-
- fillRequest(aceRequest, "this-session");
-
- configureTest(
- AceTestOptionalCachedPolicyResult::PROMPT_SESSION,
- AceTestOptionalCachedPromptDecision::DENY_FOR_SESSION,
- "this-session",
- AceTestPolicyResult::PERMIT,
- true,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::UNDETERMINED,
- AceTestOptionalCachedPromptDecision::ALLOW_FOR_SESSION,
- "another-session",
- AceTestPolicyResult::PERMIT,
- true,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-
- configureTest(
- AceTestOptionalCachedPolicyResult::NOT_APPLICABLE,
- AceTestOptionalCachedPromptDecision::ALLOW_FOR_SESSION,
- "another-session",
- AceTestPolicyResult::PERMIT,
- true,
- true,
- true);
- RUNNER_ASSERT(!client.checkFunctionCall(aceRequest));
-}
-
-// testing resource
-RUNNER_TEST(ace_client_test_16_resource_preferences)
-{
- AceClient::AceThinClient &client =
- AceClient::AceThinClientSingleton::Instance();
- AceClient::AceWidgetHandle handle = 0;
- AceClient::AceResource resource = "resource";
- AceClient::AceResource resource2 = "resource2";
-
- AceDB::AceDAOReadOnly::setWidgetDevCapSetting(
- AceDB::PreferenceTypes::PREFERENCE_BLANKET_PROMPT);
- RUNNER_ASSERT(client.getWidgetResourcePreference(resource,handle) ==
- AceClient::AcePreference::PREFERENCE_BLANKET_PROMPT);
- AceDB::AceDAOReadOnly::setWidgetDevCapSetting(
- AceDB::PreferenceTypes::PREFERENCE_DEFAULT);
- RUNNER_ASSERT(client.getWidgetResourcePreference(resource,handle) ==
- AceClient::AcePreference::PREFERENCE_DEFAULT);
- AceDB::AceDAOReadOnly::setWidgetDevCapSetting(
- AceDB::PreferenceTypes::PREFERENCE_DENY);
- RUNNER_ASSERT(client.getWidgetResourcePreference(resource,handle) ==
- AceClient::AcePreference::PREFERENCE_DENY);
- AceDB::AceDAOReadOnly::setWidgetDevCapSetting(
- AceDB::PreferenceTypes::PREFERENCE_ONE_SHOT_PROMPT);
- RUNNER_ASSERT(client.getWidgetResourcePreference(resource,handle) ==
- AceClient::AcePreference::PREFERENCE_ONE_SHOT_PROMPT);
- AceDB::AceDAOReadOnly::setWidgetDevCapSetting(
- AceDB::PreferenceTypes::PREFERENCE_PERMIT);
- RUNNER_ASSERT(client.getWidgetResourcePreference(resource,handle) ==
- AceClient::AcePreference::PREFERENCE_PERMIT);
- AceDB::AceDAOReadOnly::setWidgetDevCapSetting(
- AceDB::PreferenceTypes::PREFERENCE_SESSION_PROMPT);
- RUNNER_ASSERT(client.getWidgetResourcePreference(resource,handle) ==
- AceClient::AcePreference::PREFERENCE_SESSION_PROMPT);
-
- AceDB::PreferenceTypesMap map;
-
- AceDB::AceDAOReadOnly::setDevCapSettings(map);
- AceClient::AceResourcesPreferences* ret =
- client.getGlobalResourcesPreferences();
-
- RUNNER_ASSERT(ret->empty());
- delete ret;
-
- map.insert(make_pair(resource, AceDB::PreferenceTypes::PREFERENCE_PERMIT));
- map.insert(make_pair(resource2, AceDB::PreferenceTypes::PREFERENCE_DENY));
-
- AceDB::AceDAOReadOnly::setDevCapSettings(map);
- ret = client.getGlobalResourcesPreferences();
- RUNNER_ASSERT(2 == ret->size());
- AceClient::AceResourcesPreferences::iterator it;
- it = ret->find(resource);
- RUNNER_ASSERT((it->second) == AceClient::AcePreference::PREFERENCE_PERMIT);
- it = ret->find(resource2);
- RUNNER_ASSERT((it->second) == AceClient::AcePreference::PREFERENCE_DENY);
- delete ret;
-}
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Pawel Sikorski (p.sikorski@samsung.com)
-# @version 1.0
-# @brief
-#
-SET(TARGET_DAO_TEST "wrt-tests-dao")
-# Set engine test sources
-FILE(GLOB DAO_TESTS_SOURCES "${PROJECT_SOURCE_DIR}/tests/dao_tests/*.cpp")
-
-WRT_TEST_BUILD(${TARGET_DAO_TEST} ${DAO_TESTS_SOURCES})
-WRT_TEST_INSTALL(${TARGET_DAO_TEST})
-
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/dao_tests/wrt_dao_tests_prepare_db.sh
- DESTINATION bin
- )
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file TestCases_FeatureDAO.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file contains tests for feature dao class.
- */
-
-#include <dpl/test/test_runner.h>
-#include <dpl/foreach.h>
-#include <dpl/wrt-dao-rw/feature_dao.h>
-#include <dpl/wrt-dao-rw/plugin_dao.h>
-#include <wrt_db_types.h>
-
-using namespace WrtDB;
-
-#define RUNNER_ASSERT_WHAT_EQUALS(in, test) \
- {std::string tmp(in); \
- RUNNER_ASSERT_MSG(tmp == test, "Equals: [" + tmp + "]");}
-
-RUNNER_TEST(feature_dao_test_register_features)
-{
- PluginHandle plHandle;
- {
- std::string libraryPath("nfp1 lib_path");
- std::string libraryName("nfp1");
-
- PluginMetafileData pluginData;
- pluginData.m_libraryName = libraryName;
-
- plHandle = PluginDAO::registerPlugin(pluginData, libraryPath);
- RUNNER_ASSERT(PluginDAO::isPluginInstalled(libraryName) == true);
-
- FeatureHandleList old = FeatureDAOReadOnly::GetHandleList();
- PluginMetafileData::Feature f;
- f.m_name = std::string("new_f1");
-
- FeatureHandle handle = FeatureDAO::RegisterFeature(f,plHandle);
- RUNNER_ASSERT_MSG(handle != -1, "Already registered");
- RUNNER_ASSERT_MSG(old.size() < FeatureDAOReadOnly::GetHandleList().size(),
- "New feature should be saved");
-
- FeatureDAOReadOnly dao(handle);
-
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetName(),"new_f1");
- plHandle = dao.GetPluginHandle();
- }
-
- {
- FeatureHandleList old = FeatureDAOReadOnly::GetHandleList();
-
- PluginMetafileData::Feature f;
- f.m_name = std::string("new_f2");
-
- FeatureHandle handle = FeatureDAO::RegisterFeature(f,plHandle);
- RUNNER_ASSERT_MSG(handle != -1, "Already registered");
- RUNNER_ASSERT_MSG(old.size() < FeatureDAOReadOnly::GetHandleList().size(),
- "New feature should be saved");
-
- FeatureDAOReadOnly dao(handle);
-
- RUNNER_ASSERT_MSG(plHandle == dao.GetPluginHandle(),
- "New plugin registered (should be old used)");
- }
-}
-
-RUNNER_TEST(feature_dao_test_get_feature_properties)
-{
- {
- FeatureDAOReadOnly dao("feature1");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetName(), "feature1");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetLibraryName(), "plugin1");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetLibraryPath(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetInstallURI(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetKeyCn(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetRootKey(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetRootKeyFingerprint(), "");
- }
-
- {
- FeatureDAOReadOnly dao("feature2");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetName(), "feature2");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetLibraryName(), "p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetLibraryPath(), "path_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetInstallURI(), "uri_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetKeyCn(), "keycn_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetRootKey(), "rkey_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetRootKeyFingerprint(), "rkeyF_to_p4");
- }
-
- {
- FeatureDAOReadOnly dao("feature3");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetName(), "feature3");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetLibraryName(), "p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetLibraryPath(), "path_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetInstallURI(), "uri_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetKeyCn(), "keycn_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetRootKey(), "rkey_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetRootKeyFingerprint(), "rkeyF_to_p4");
- }
-}
-
-RUNNER_TEST(feature_dao_test_feature_constructor_name)
-{
- std::list<const char *> preinstalled;
- preinstalled.push_back("feature1");
- preinstalled.push_back("feature2");
- preinstalled.push_back("feature3");
- preinstalled.push_back("feature4");
-
- FOREACH(it, preinstalled)
- {
- FeatureDAOReadOnly dao(*it);
- RUNNER_ASSERT_WHAT_EQUALS(dao.GetName(), *it);
- }
-
- //TODO check exception that may occur (feature does not exist)
-}
-
-RUNNER_TEST(feature_dao_test_feature_handle_list)
-{
- FeatureHandleList handles = FeatureDAOReadOnly::GetHandleList();
- RUNNER_ASSERT(handles.size() >= 4);
-}
-
-RUNNER_TEST(feature_dao_test_is_feature_installed)
-{
- //installed
- {
- std::list<const char *> preinstalled;
- preinstalled.push_back("feature1");
- preinstalled.push_back("feature2");
- preinstalled.push_back("feature3");
- preinstalled.push_back("feature4");
-
- FOREACH(it, preinstalled)
- RUNNER_ASSERT(FeatureDAOReadOnly::isFeatureInstalled(*it));
- }
-
- //not installed
- {
- RUNNER_ASSERT(FeatureDAOReadOnly::isFeatureInstalled("not_installed1")==false);
- RUNNER_ASSERT(FeatureDAOReadOnly::isFeatureInstalled("plugin1") == false);
- RUNNER_ASSERT(FeatureDAOReadOnly::isFeatureInstalled("") == false);
- RUNNER_ASSERT(FeatureDAOReadOnly::isFeatureInstalled("ff") == false);
- }
-}
-
-RUNNER_TEST(feature_dao_test_get_device_capab)
-{
-#if 0
- //TODO do more tests
-
- {//check deviceCaps
- Feature f;
- f.setName("new_dev_f4");
- f.setLibraryName("new_dev_f4 lib_name");
-
- FeatureDAOReadOnly::DeviceCapabilitiesList devList;
- devList.insert("new_dev_f4 devcap1");
- devList.insert("new_dev_f4 devcap2");
-
- FOREACH(it, devList)
- f.addDeviceCapability(*it);
-
- FeatureHandle handle = FeatureDAO::RegisterFeature(f,"new_dev_f4 path");
-
- FeatureDAOReadOnly dao(handle);
-
- FeatureDAOReadOnly::DeviceCapabilitiesList gotList =
- dao.GetDeviceCapabilities();
- RUNNER_ASSERT_MSG(gotList.size() == devList.size(),
- "deviceCaps wrong");
- }
-#endif
-}
-
-/*
- * Checks if FeatureDAOReadOnly::isDeviceCapabilityInstalled works correctly.
- */
-RUNNER_TEST(feature_dao_test_is_device_capab_installed)
-{
- //installed
- std::list<const char *> preinstalled;
- preinstalled.push_back("devicecap1");
- preinstalled.push_back("devicecap2");
- preinstalled.push_back("devicecap3");
- preinstalled.push_back("devicecap4");
-
- FOREACH(it, preinstalled)
- RUNNER_ASSERT(FeatureDAOReadOnly::isDeviceCapabilityInstalled(*it));
-
- //not installed
- std::list<const char *> notinstalled;
- notinstalled.push_back("notinstalled1");
- notinstalled.push_back("plugin1");
- notinstalled.push_back("");
- notinstalled.push_back("ff");
-
- FOREACH(it, notinstalled)
- RUNNER_ASSERT(!FeatureDAOReadOnly::isDeviceCapabilityInstalled(*it));
-}
-
-#undef RUNNER_ASSERT_WHAT_EQUALS
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file TestCases_GlobalDAO.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file contains tests for global dao class.
- */
-
-#include <list>
-#include <vector>
-#include <set>
-#include <dpl/test/test_runner.h>
-#include <dpl/foreach.h>
-#include <dpl/exception.h>
-#include <dpl/string.h>
-#include <dpl/wrt-dao-rw/global_dao.h>
-#include <wrt_db_types.h>
-
-using namespace WrtDB;
-
-#define RUNNER_ASSERT_WHAT_EQUALS(in, test) \
- {std::string tmp(in); \
- RUNNER_ASSERT_MSG(tmp == test, "Equals: [" + tmp + "]");}
-
-void RUNNER_ASSERT_POWDER_RULES_EQUALS(
- const WrtDB::ChildProtection::PowderRules::CategoryRule& rule1,
- const WrtDB::ChildProtection::PowderRules::CategoryRule& rule2)
-{
- RUNNER_ASSERT_MSG(rule1.category == rule2.category,
- "categories are different");
- RUNNER_ASSERT_MSG(rule1.level == rule2.level,
- "levels are different");
- RUNNER_ASSERT_MSG(*(rule1.context) == *(rule2.context),
- "contextes are different");
-}
-
-template<typename ContainerType1, typename ContainerType2>
-bool CompareContainers(const ContainerType1& container1,
- const ContainerType2& container2)
-{
- typedef std::multiset<typename ContainerType1::value_type> Set1;
- typedef std::multiset<typename ContainerType2::value_type> Set2;
- Set1 set1(container1.begin(), container1.end());
- Set2 set2(container2.begin(), container2.end());
- return set1 == set2;
-}
-
-namespace
-{
-const DPL::String widgetPackage5(L"widgetpackage5");
-} // namespace
-
-RUNNER_TEST(global_dao_deffered_list)
-{
- WidgetPackageList list;
- WidgetPackageList match;
- match.push_back(L"widgetpackage1");
- match.push_back(L"widgetpackage2");
- match.push_back(L"widgetpackage3");
- match.push_back(L"widgetpackage4");
-
- // get
- list = GlobalDAO::GetDefferedWidgetPackageInstallationList();
- RUNNER_ASSERT(list == match);
-
- // add
- match.push_back(widgetPackage5);
- GlobalDAO::AddDefferedWidgetPackageInstallation(widgetPackage5);
-
- list = GlobalDAO::GetDefferedWidgetPackageInstallationList();
- RUNNER_ASSERT(list == match);
-
- // add duplicate
- Try {
- GlobalDAO::AddDefferedWidgetPackageInstallation(widgetPackage5);
- RUNNER_ASSERT_MSG(false, "DatabaseError exception expected");
- }
- Catch(GlobalDAO::Exception::DatabaseError){
- RUNNER_ASSERT(true);
- }
- list = GlobalDAO::GetDefferedWidgetPackageInstallationList();
- RUNNER_ASSERT(list == match);
-
- // remove
- match.pop_front();
- GlobalDAO::RemoveDefferedWidgetPackageInstallation(L"widgetpackage1");
-
- list = GlobalDAO::GetDefferedWidgetPackageInstallationList();
- RUNNER_ASSERT(list == match);
-
- // remove nonexisting
- GlobalDAO::RemoveDefferedWidgetPackageInstallation(L"widgetpackage6");
-
- list = GlobalDAO::GetDefferedWidgetPackageInstallationList();
- RUNNER_ASSERT(list == match);
-}
-
-RUNNER_TEST(global_dao_developer_mode)
-{
- bool prev_mode = GlobalDAO::GetDeveloperMode();
- GlobalDAO::SetDeveloperMode(false);
- RUNNER_ASSERT_MSG(!GlobalDAO::GetDeveloperMode(), "set false failed");
-
- GlobalDAO::SetDeveloperMode(true);
- RUNNER_ASSERT_MSG(GlobalDAO::GetDeveloperMode(), "set true failed");
- GlobalDAO::SetDeveloperMode(prev_mode);
-}
-
-RUNNER_TEST(global_dao_parental_mode)
-{
- bool prev_mode = GlobalDAO::GetParentalMode();
- GlobalDAO::SetParentalMode(false);
- RUNNER_ASSERT_MSG(!GlobalDAO::GetParentalMode(), "set false failed");
-
- GlobalDAO::SetParentalMode(true);
- RUNNER_ASSERT_MSG(GlobalDAO::GetParentalMode(), "set true failed");
- GlobalDAO::SetParentalMode(prev_mode);
-}
-
-RUNNER_TEST(global_dao_parental_mode_age)
-{
- DPL::OptionalInt prev_age = GlobalDAO::GetParentalAllowedAge();
-
- GlobalDAO::SetParentalAllowedAge(DPL::OptionalInt::Null);
- RUNNER_ASSERT_MSG((GlobalDAO::GetParentalAllowedAge()).IsNull(),
- "failed to set allowed age to null");
- RUNNER_ASSERT_MSG((GlobalDAO::GetPowderRules().ageLimit).IsNull(),
- "failed getting allowed age from GetPowderRules()");
-
- const int AGE = 15;
- DPL::OptionalInt myInt(AGE);
- GlobalDAO::SetParentalAllowedAge(myInt);
- RUNNER_ASSERT_MSG(!(GlobalDAO::GetParentalAllowedAge()).IsNull() &&
- AGE == *GlobalDAO::GetParentalAllowedAge(),
- "allowed age should be 15");
-
- WrtDB::ChildProtection::PowderRules powderRules = GlobalDAO::GetPowderRules();
- RUNNER_ASSERT_MSG(!(powderRules.ageLimit).IsNull() &&
- AGE == *(powderRules.ageLimit),
- "failed getting allowed age from GetPowderRules()");
-
- GlobalDAO::SetParentalAllowedAge(prev_age);
-}
-
-RUNNER_TEST(global_dao_powder_rules)
-{
- RUNNER_ASSERT_MSG(0 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be no powder rules");
-
- WrtDB::ChildProtection::PowderRules::CategoryRule rule(
- DPL::FromASCIIString("sex"),
- WrtDB::Powder::Description::Level5,
- DPL::FromASCIIString("artstic"));
- GlobalDAO::AddCategoryRule(rule);
-
- WrtDB::ChildProtection::PowderRules powderRules2 =
- GlobalDAO::GetPowderRules();
- RUNNER_ASSERT_MSG(1 == powderRules2.rules.size(),
- "there should be 1 powder rule");
-
- RUNNER_ASSERT_POWDER_RULES_EQUALS(powderRules2.rules[0], rule);
-
-
- GlobalDAO::RemoveCategoryRule(rule);
- RUNNER_ASSERT_MSG(0 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be no powder rules");
-}
-
-RUNNER_TEST(global_dao_powder_rules_update_test)
-{
- WrtDB::ChildProtection::PowderRules powderRules = GlobalDAO::GetPowderRules();
- RUNNER_ASSERT_MSG(0 == powderRules.rules.size(),
- "there should be no powder rules");
-
- WrtDB::ChildProtection::PowderRules::CategoryRule rule(
- DPL::FromASCIIString("sex"),
- WrtDB::Powder::Description::Level5,
- DPL::FromASCIIString("artstic"));
-
- GlobalDAO::AddCategoryRule(rule);
-
- WrtDB::ChildProtection::PowderRules powderRules2 =
- GlobalDAO::GetPowderRules();
- RUNNER_ASSERT_MSG(1 == powderRules2.rules.size(),
- "there should be 1 powder rule");
- RUNNER_ASSERT_POWDER_RULES_EQUALS(powderRules2.rules[0], rule);
-
- WrtDB::ChildProtection::PowderRules::CategoryRule
- secondRule(DPL::FromASCIIString("sex"),
- WrtDB::Powder::Description::Level4,
- DPL::FromASCIIString("artstic"));
-
- GlobalDAO::UpdateCategoryRule(rule, secondRule);
-
- powderRules2 = GlobalDAO::GetPowderRules();
- RUNNER_ASSERT_MSG(1 == powderRules2.rules.size(),
- "there should be 1 powder rule");
- RUNNER_ASSERT_POWDER_RULES_EQUALS(powderRules2.rules[0], secondRule);
-
- GlobalDAO::RemoveCategoryRule(rule);
- RUNNER_ASSERT_MSG(1 == GlobalDAO::GetPowderRules().rules.size(),
- "RemoveCategoryRule removed wrong element");
-
- GlobalDAO::RemoveCategoryRule(secondRule);
- RUNNER_ASSERT_MSG(0 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be no powder rules");
-}
-RUNNER_TEST(global_dao_powder_rules_add_multiple_values)
-{
- WrtDB::ChildProtection::PowderRules powderRules = GlobalDAO::GetPowderRules();
- RUNNER_ASSERT_MSG(0 == powderRules.rules.size(),
- "there should be no powder rules");
-
- WrtDB::ChildProtection::PowderRules::CategoryRule rule(
- DPL::FromASCIIString("sex"),
- WrtDB::Powder::Description::Level5,
- DPL::OptionalString::Null);
-
- WrtDB::ChildProtection::PowderRules::CategoryRule artisticSex(
- DPL::FromASCIIString("sex"),
- WrtDB::Powder::Description::Level5,
- DPL::FromASCIIString("artstic"));
-
- GlobalDAO::AddCategoryRule(artisticSex);
- RUNNER_ASSERT_MSG(1 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be 1 powder rule");
-
- GlobalDAO::AddCategoryRule(artisticSex);
- RUNNER_ASSERT_MSG(1 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be 1 powder rule after "
- "adding same values twice");
-
- GlobalDAO::AddCategoryRule(rule);
- RUNNER_ASSERT_MSG(2 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be 2 powder rules");
-
- GlobalDAO::RemoveCategoryRule(artisticSex);
- RUNNER_ASSERT_MSG(1 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be one powder rule after deleting "
- "one of two values");
-
- GlobalDAO::RemoveCategoryRule(rule);
- RUNNER_ASSERT_MSG(0 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be no powder rules");
-}
-
-RUNNER_TEST(global_dao_powder_rule_add_double_null)
-{
- WrtDB::ChildProtection::PowderRules powderRules = GlobalDAO::GetPowderRules();
- RUNNER_ASSERT_MSG(0 == powderRules.rules.size(),
- "there should be no powder rules");
-
- WrtDB::ChildProtection::PowderRules::CategoryRule rule(
- DPL::FromASCIIString("sex"),
- WrtDB::Powder::Description::Level5,
- DPL::OptionalString::Null);
-
- GlobalDAO::AddCategoryRule(rule);
- RUNNER_ASSERT_MSG(1 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be 1 powder rule");
-
- GlobalDAO::AddCategoryRule(rule);
- RUNNER_ASSERT_MSG(1 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be 1 powder rule after adding "
- "second NULL");
-
- GlobalDAO::RemoveCategoryRule(rule);
- RUNNER_ASSERT_MSG(0 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be no powder rules");
-}
-
-RUNNER_TEST(global_dao_powder_rule_remove_null)
-{
- WrtDB::ChildProtection::PowderRules powderRules = GlobalDAO::GetPowderRules();
- RUNNER_ASSERT_MSG(0 == powderRules.rules.size(),
- "there should be no powder rules");
-
- WrtDB::ChildProtection::PowderRules::CategoryRule rule(
- DPL::FromASCIIString("sex"),
- WrtDB::Powder::Description::Level5,
- DPL::OptionalString::Null);
-
- WrtDB::ChildProtection::PowderRules::CategoryRule artisticSex(
- DPL::FromASCIIString("sex"),
- WrtDB::Powder::Description::Level5,
- DPL::FromASCIIString("artstic"));
-
- GlobalDAO::AddCategoryRule(artisticSex);
- RUNNER_ASSERT_MSG(1 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be 1 powder rule");
-
- GlobalDAO::AddCategoryRule(rule);
- RUNNER_ASSERT_MSG(2 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be 2 powder rules");
-
- GlobalDAO::RemoveCategoryRule(rule);
- RUNNER_ASSERT_MSG(1 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be one powder rule after deleting "
- "rule with no context");
-
- GlobalDAO::RemoveCategoryRule(artisticSex);
- RUNNER_ASSERT_MSG(0 == GlobalDAO::GetPowderRules().rules.size(),
- "there should be no powder rules");
-}
-namespace
-{
-const size_t urlListLength = 4;
-const DPL::String urlList[urlListLength] = {
- DPL::FromASCIIString("www.onet.pl"),
- DPL::FromASCIIString("samsung.com"),
- DPL::FromASCIIString("www.sprc.pl"),
- DPL::FromASCIIString("www.samsung.com")};
-}
-RUNNER_TEST(global_dao_adult_blacklist_add)
-{
- std::set<DPL::String> blacklistSet;
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-
- blacklistSet.insert(urlList[0]);
- GlobalDAO::AddAdultBlackListElement(urlList[0]);
-
- RUNNER_ASSERT_MSG(GlobalDAO::IsElementOnAdultBlackList(urlList[0]),
- "GetAdultBlackList should return true. "
- "Element is on blacklist");
- RUNNER_ASSERT_MSG(!GlobalDAO::IsElementOnAdultBlackList(urlList[1]),
- "GetAdultBlackList should return false. "
- "Element isn't on blacklist");
-
-
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-
- blacklistSet.erase(urlList[0]);
- GlobalDAO::RemoveAdultBlackListElement(urlList[0]);
-
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-}
-
-RUNNER_TEST(global_dao_adult_blacklist_multiple_add)
-{
- std::set<DPL::String> blacklistSet;
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-
- blacklistSet.insert(urlList[0]);
- GlobalDAO::AddAdultBlackListElement(urlList[0]);
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-
- blacklistSet.insert(urlList[0]);
- GlobalDAO::AddAdultBlackListElement(urlList[0]);
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-
- blacklistSet.erase(urlList[0]);
- GlobalDAO::RemoveAdultBlackListElement(urlList[0]);
-
- RUNNER_ASSERT_MSG(GlobalDAO::GetAdultBlackList().empty(),
- "Blacklist is not equal to other blacklist");
-
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-}
-
-RUNNER_TEST(global_dao_adult_blacklist_multiple_update)
-{
- std::set<DPL::String> blacklistSet(urlList+1, urlList+urlListLength);
- RUNNER_ASSERT_MSG(GlobalDAO::GetAdultBlackList().empty(),
- "Blacklist should be empty");
-
-
- FOREACH (it, blacklistSet) {
- GlobalDAO::AddAdultBlackListElement(*it);
- }
-
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-
-
-
- blacklistSet.erase(urlList[1]);
- blacklistSet.insert(urlList[0]);
- GlobalDAO::UpdateAdultBlackList(urlList[1], urlList[0]);
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-
-
- FOREACH (it, blacklistSet) {
- GlobalDAO::RemoveAdultBlackListElement(*it);
- }
- blacklistSet.clear();
-
- RUNNER_ASSERT_MSG(GlobalDAO::GetAdultBlackList().empty(),
- "Blacklist is not equal to other blacklist");
-
- RUNNER_ASSERT_MSG(CompareContainers(GlobalDAO::GetAdultBlackList(),
- blacklistSet),
- "Blacklist is not equal to other blacklist");
-}
-
-RUNNER_TEST(home_network_data_usage)
-{
- GlobalDAO::NetworkAccessMode original =
- GlobalDAO::GetHomeNetworkDataUsage();
-
- GlobalDAO::SetHomeNetworkDataUsage(GlobalDAO::CONNECT_AUTOMATICALLY);
- RUNNER_ASSERT_MSG(GlobalDAO::CONNECT_AUTOMATICALLY ==
- GlobalDAO::GetHomeNetworkDataUsage(), "Value not updated");
-
- GlobalDAO::SetHomeNetworkDataUsage(GlobalDAO::ALWAYS_ASK);
- RUNNER_ASSERT_MSG(GlobalDAO::ALWAYS_ASK ==
- GlobalDAO::GetHomeNetworkDataUsage(), "Value not updated");
-
- GlobalDAO::SetHomeNetworkDataUsage(GlobalDAO::NEVER_CONNECT);
- RUNNER_ASSERT_MSG(GlobalDAO::NEVER_CONNECT ==
- GlobalDAO::GetHomeNetworkDataUsage(), "Value not updated");
-
- GlobalDAO::SetHomeNetworkDataUsage(original);
- RUNNER_ASSERT_MSG(original == GlobalDAO::GetHomeNetworkDataUsage(),
- "Value not updated");
-}
-
-RUNNER_TEST(roaming_data_usage)
-{
- GlobalDAO::NetworkAccessMode original =
- GlobalDAO::GetRoamingDataUsage();
-
- GlobalDAO::SetRoamingDataUsage(GlobalDAO::CONNECT_AUTOMATICALLY);
- RUNNER_ASSERT_MSG(GlobalDAO::CONNECT_AUTOMATICALLY ==
- GlobalDAO::GetRoamingDataUsage(), "Value not updated");
-
- GlobalDAO::SetRoamingDataUsage(GlobalDAO::ALWAYS_ASK);
- RUNNER_ASSERT_MSG(GlobalDAO::ALWAYS_ASK ==
- GlobalDAO::GetRoamingDataUsage(), "Value not updated");
-
- GlobalDAO::SetRoamingDataUsage(GlobalDAO::NEVER_CONNECT);
- RUNNER_ASSERT_MSG(GlobalDAO::NEVER_CONNECT ==
- GlobalDAO::GetRoamingDataUsage(), "Value not updated");
-
- GlobalDAO::SetRoamingDataUsage(original);
- RUNNER_ASSERT_MSG(original == GlobalDAO::GetRoamingDataUsage(),
- "Value not updated");
-}
-
-#undef RUNNER_ASSERT_WHAT_EQUALS
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file TestCases_PluginDAO.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file contains tests for feature dao class.
- */
-
-#include <list>
-#include <dpl/test/test_runner.h>
-#include <dpl/foreach.h>
-#include <dpl/exception.h>
-#include <dpl/wrt-dao-rw/plugin_dao.h>
-#include <plugin_install/plugin_objects.h>
-#include <wrt_db_types.h>
-#include <dpl/log/log.h>
-
-using namespace WrtDB;
-
-#define RUNNER_ASSERT_WHAT_EQUALS(in, test) \
- {std::string tmp(in); \
- RUNNER_ASSERT_MSG(tmp == test, "Equals: [" + tmp + "]");}
-
-RUNNER_TEST(plugin_dao_test_register_plugins)
-{
- {
- std::string libraryPath("np1 lib_path");
- std::string libraryName("np1");
- std::string featuresInstallURI("np1 install_uri1");
- std::string featuresKeyCN("np1 keycn");
- std::string featuresRootCN("np1 rkey");
- std::string featuresRootFingerprint("np1 rkeyF");
-
- PluginMetafileData pluginData;
- pluginData.m_libraryName = libraryName;
- pluginData.m_featuresInstallURI = featuresInstallURI;
- pluginData.m_featuresKeyCN = featuresKeyCN;
- pluginData.m_featuresRootCN = featuresRootCN;
- pluginData.m_featuresRootFingerprint = featuresRootFingerprint;
-
- PluginHandle handle = PluginDAO::registerPlugin(pluginData, libraryPath);
- PluginDAO::setPluginInstallationStatus(handle,PluginDAO::INSTALLATION_COMPLETED);
- RUNNER_ASSERT(PluginDAO::isPluginInstalled(libraryName) == true);
-
- PluginDAO dao(handle);
- std::string tmp;
- tmp = dao.getLibraryPath(); //do for each
- RUNNER_ASSERT_MSG(tmp == libraryPath, "Equals: " + tmp);
- RUNNER_ASSERT(dao.getInstallURI() == featuresInstallURI);
- RUNNER_ASSERT(dao.getKeyCn() == featuresKeyCN);
- RUNNER_ASSERT(dao.getRootKey() == featuresRootCN);
- RUNNER_ASSERT(dao.getRootKeyFingerprint() == featuresRootFingerprint);
- }
-
- {
- std::string libraryName("np2");
-
- PluginMetafileData pluginData;
- pluginData.m_libraryName = libraryName;
-
- PluginHandle handle = PluginDAO::registerPlugin(pluginData, "");
- PluginDAO::setPluginInstallationStatus(handle,PluginDAO::INSTALLATION_COMPLETED);
- RUNNER_ASSERT(PluginDAO::isPluginInstalled(libraryName) == true);
-
- PluginDAO dao(handle);
- RUNNER_ASSERT(dao.getLibraryPath() == "");
- RUNNER_ASSERT(dao.getInstallURI() == "");
- RUNNER_ASSERT(dao.getKeyCn() == "");
- RUNNER_ASSERT(dao.getRootKey() == "");
- RUNNER_ASSERT(dao.getRootKeyFingerprint() == "");
- }
-}
-
-RUNNER_TEST(plugin_dao_test_register_plugin_implemented_object)
-{
- {
- std::string libraryPath("np3 lib_path");
- std::string libraryName("np3");
-
- PluginMetafileData pluginData;
- pluginData.m_libraryName = libraryName;
-
- PluginHandle handle =
- PluginDAO::registerPlugin(pluginData, libraryPath);
- RUNNER_ASSERT(PluginDAO::isPluginInstalled(libraryName) == true);
-
- std::string object1("object1");
- std::string object2("object2");
- PluginDAO::registerPluginImplementedObject(object1, handle);
- PluginDAO::registerPluginImplementedObject(object2, handle);
-
- PluginHandle retHandle1 =
- PluginDAO::getPluginHandleForImplementedObject(object1);
- PluginHandle retHandle2 =
- PluginDAO::getPluginHandleForImplementedObject(object1);
- RUNNER_ASSERT(retHandle1 == handle);
- RUNNER_ASSERT(retHandle2 == handle);
- }
-}
-
-RUNNER_TEST(plugin_dao_test_register_library_dependencies)
-{
- {
- std::string libraryPath("np4 lib_path");
- std::string libraryName("np4");
-
- PluginMetafileData pluginData;
- pluginData.m_libraryName = libraryName;
-
- PluginHandle handle =
- PluginDAO::registerPlugin(pluginData, libraryPath);
- PluginDAO::setPluginInstallationStatus(handle,PluginDAO::INSTALLATION_COMPLETED);
- RUNNER_ASSERT(PluginDAO::isPluginInstalled(libraryName) == true);
-
- PluginHandle depHandles[] = {117, 119};
-
- PluginHandleSetPtr dependencies(new PluginHandleSet);
- dependencies->insert(depHandles[1]);
- dependencies->insert(depHandles[2]);
-
- PluginDAO::registerPluginLibrariesDependencies(handle, dependencies);
-
- PluginDAO dao(handle);
- PluginHandleSetPtr retDependencies;
- retDependencies = dao.getLibraryDependencies();
-
- RUNNER_ASSERT(
- retDependencies->size()==sizeof(depHandles)/sizeof(depHandles[0]));
- RUNNER_ASSERT(
- retDependencies->find(depHandles[1]) != retDependencies->end());
- RUNNER_ASSERT(
- retDependencies->find(depHandles[2]) != retDependencies->end());
- }
-}
-
-RUNNER_TEST(plugin_dao_test_register_required_object)
-{
- {
- std::string libraryPath("np5 lib_path");
- std::string libraryName("np5");
-
- PluginMetafileData pluginData;
- pluginData.m_libraryName = libraryName;
-
- PluginHandle handle =
- PluginDAO::registerPlugin(pluginData, libraryPath);
- PluginDAO::setPluginInstallationStatus(handle,PluginDAO::INSTALLATION_COMPLETED);
- RUNNER_ASSERT(PluginDAO::isPluginInstalled(libraryName) == true);
-
- const size_t numObjects =2;
- std::string objectReq [numObjects];
- objectReq[0] = std::string("object1.req");
- objectReq[1] = std::string("object2.req");
- PluginDAO::registerPluginRequiredObject(objectReq[0], handle);
- PluginDAO::registerPluginRequiredObject(objectReq[1], handle);
-
- PluginObjects::ObjectsPtr objects =
- PluginDAO::getRequiredObjectsForPluginHandle(handle);
-
- RUNNER_ASSERT(objects->size() == numObjects
- && objects->find(objectReq[0]) != objects->end()
- && objects->find(objectReq[1]) != objects->end());
- }
-}
-
-RUNNER_TEST(plugin_dao_test_is_library_installed)
-{
- {
- //exist
- std::list<const char *> preinstalled;
- preinstalled.push_back("plugin1");
- preinstalled.push_back("plugin2");
- preinstalled.push_back("plugin3");
- preinstalled.push_back("p4");
- preinstalled.push_back("p5");
-
- FOREACH(it, preinstalled)
- RUNNER_ASSERT_MSG(PluginDAO::isPluginInstalled(*it),
- std::string("Not found: ") + *it);
- }
-
- {
- //does not exist
- RUNNER_ASSERT_MSG(
- PluginDAO::isPluginInstalled("not_installed1") == false,
- "Found not_installed1");
- RUNNER_ASSERT_MSG(PluginDAO::isPluginInstalled("p 4") == false,
- "Found p 4");
- RUNNER_ASSERT_MSG(PluginDAO::isPluginInstalled("") == false,
- "Found <empty>");
- RUNNER_ASSERT_MSG(PluginDAO::isPluginInstalled("p33") == false,
- "Found p33");
- RUNNER_ASSERT_MSG(PluginDAO::isPluginInstalled("feature1") == false,
- "Found feature1");
- }
-}
-
-RUNNER_TEST(plugin_dao_test_get_plugin_handle_list)
-{
- PluginHandleList handles = PluginDAO::getPluginHandleList();
- RUNNER_ASSERT(handles.size() >= 5);
-}
-
-RUNNER_TEST(plugin_dao_test_constructor_name)
-{
- {
- //exist
- std::list<const char *> preinstalled;
- preinstalled.push_back("plugin1");
- preinstalled.push_back("plugin2");
- preinstalled.push_back("plugin3");
- preinstalled.push_back("p4");
- preinstalled.push_back("p5");
-
- FOREACH(it, preinstalled)
- {
- PluginDAO dao(*it);
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryName(), *it);
- }
- }
-
- {
- //does not exist
- std::list<const char *> not_installed;
- not_installed.push_back("plugin 1");
- not_installed.push_back("");
- not_installed.push_back("p 3");
-
- FOREACH(it, not_installed)
- {
- Try {
- //Plugin not exist
- PluginDAO dao(*it);
- RUNNER_ASSERT_MSG(false, "should not be found");
- }
- Catch (PluginDAO::Exception::PluginNotExist) {
- continue;
- }
- }
- }
-}
-
-RUNNER_TEST(plugin_dao_test_get_plugin_properties)
-{
- {
- PluginDAO dao("p4");
- RUNNER_ASSERT(dao.getPluginHandle() == 4);
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryName(), "p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryPath(), "path_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getInstallURI(), "uri_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getKeyCn(), "keycn_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getRootKey(), "rkey_to_p4");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getRootKeyFingerprint(), "rkeyF_to_p4");
- }
-
- {
- PluginDAO dao(5);
- RUNNER_ASSERT(dao.getPluginHandle() == 5);
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryName(), "p5");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryPath(), "path_to_p5");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getInstallURI(), "uri_to_p5");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getKeyCn(), "keycn_to_p5");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getRootKey(), "rkey_to_p5");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getRootKeyFingerprint(), "rkeyF_to_p5");
- }
-
- {
- PluginDAO dao(2);
- RUNNER_ASSERT(dao.getPluginHandle() == 2);
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryName(), "plugin2");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryPath(), "path_to_plugin2");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getInstallURI(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getKeyCn(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getRootKey(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getRootKeyFingerprint(), "");
- }
-
- {
- PluginDAO dao(1);
- RUNNER_ASSERT(dao.getPluginHandle() == 1);
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryName(), "plugin1");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getLibraryPath(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getInstallURI(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getKeyCn(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getRootKey(), "");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getRootKeyFingerprint(), "");
- }
-}
-
-RUNNER_TEST(plugin_dao_test_get_implemented_objects_for_plugin_handle_1)
-{
- {
- const int handle = 1;
- PluginDAOReadOnly dao(handle);
- auto dbHandle = dao.getPluginHandle();
- RUNNER_ASSERT(dbHandle == handle);
- auto objects = dao.getImplementedObjectsForPluginHandle(dbHandle);
-
- RUNNER_ASSERT(objects.size() == 0);
- }
-}
-
-RUNNER_TEST(plugin_dao_test_get_implemented_objects_for_plugin_handle_2)
-{
- {
- std::set< std::string > preinstalled =
- {
- ""
- };
-
- PluginDAOReadOnly dao(2);
- auto dbHandle = dao.getPluginHandle();
- auto objects = dao.getImplementedObjectsForPluginHandle(dbHandle);
-
- LogError("\n" << objects.size() << " " << preinstalled.size() << "\n");
-
- RUNNER_ASSERT(objects.size() == preinstalled.size());
-
- FOREACH(dbObject, objects)
- {
- RUNNER_ASSERT(preinstalled.find(*dbObject) != preinstalled.end());
- }
- }
-}
-
-RUNNER_TEST(plugin_dao_test_get_implemented_objects_for_plugin_handle_3)
-{
- {
- std::set< std::string > preinstalled =
- {
- "Plugin_3_Object_A"
- };
-
- PluginDAOReadOnly dao(3);
- auto dbHandle = dao.getPluginHandle();
- auto objects = dao.getImplementedObjectsForPluginHandle(dbHandle);
- RUNNER_ASSERT(objects.size() == preinstalled.size());
-
- FOREACH(dbObject, objects)
- {
- RUNNER_ASSERT(preinstalled.find(*dbObject) != preinstalled.end());
- }
- }
-}
-
-RUNNER_TEST(plugin_dao_test_get_implemented_objects_for_plugin_handle_4)
-{
- {
- std::set< std::string > preinstalled =
- {
- "Plugin_4_Object_A",
- "Plugin_4_Object_B",
- "Plugin_4_Object_C",
- };
-
- PluginDAOReadOnly dao(4);
- auto dbHandle = dao.getPluginHandle();
- auto objects = dao.getImplementedObjectsForPluginHandle(dbHandle);
- RUNNER_ASSERT(objects.size() == preinstalled.size());
-
- FOREACH(dbObject, objects)
- {
- RUNNER_ASSERT(preinstalled.find(*dbObject) != preinstalled.end());
- }
- }
-}
-
-RUNNER_TEST(plugin_dao_test_get_implemented_objects_for_plugin_handle_5)
-{
- {
- std::set< std::string > preinstalled =
- {
- "Plugin_5_Object_B",
- };
-
- PluginDAOReadOnly dao(5);
- auto dbHandle = dao.getPluginHandle();
- auto objects = dao.getImplementedObjectsForPluginHandle(dbHandle);
- RUNNER_ASSERT(objects.size() == preinstalled.size());
-
- FOREACH(dbObject, objects)
- {
- RUNNER_ASSERT(preinstalled.find(*dbObject) == preinstalled.end());
- }
- }
-}
-
-
-#undef RUNNER_ASSERT_WHAT_EQUALS
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file TestCases_PropertyDAO.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file contains tests for property dao class.
- */
-
-#include <list>
-#include <map>
-#include <dpl/test/test_runner.h>
-#include <dpl/foreach.h>
-#include <dpl/exception.h>
-#include <dpl/wrt-dao-rw/property_dao.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <wrt_db_types.h>
-
-using namespace WrtDB;
-using namespace WrtDB::PropertyDAOReadOnly;
-
-// Widgets used 2000, 2001, 2002, 2003(saved by wrt_dao_tests_prepare_db.sh)
-
-#define RUNNER_ASSERT_WHAT_EQUALS(in, test) \
- {std::string tmp(in); \
- RUNNER_ASSERT_MSG(tmp == test, "Equals: [" + tmp + "]");}
-
-#define RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(in, test) \
- { \
- if(in.IsNull()) RUNNER_ASSERT_MSG(false, "NULL"); \
- else RUNNER_ASSERT_WHAT_EQUALS(DPL::ToUTF8String(*in),test);\
- }
-
-RUNNER_TEST(property_dao_get_lists)
-{
- {//property list
- std::map<WidgetHandle, size_t> prefsMap;
- prefsMap.insert(std::pair<WidgetHandle, size_t>(2000, 2));
- prefsMap.insert(std::pair<WidgetHandle, size_t>(2001, 1));
- prefsMap.insert(std::pair<WidgetHandle, size_t>(2002, 2));
- prefsMap.insert(std::pair<WidgetHandle, size_t>(1, 0)); //no widget
-
- FOREACH(it, prefsMap) {
- PropertyDAOReadOnly::WidgetPreferenceList prefs =
- PropertyDAOReadOnly::GetPropertyList(it->first);
- RUNNER_ASSERT(prefs.size() == it->second);
- }
- }
-
- {//property key list
- WidgetPropertyKeyList orig_2000;
- orig_2000.push_back(DPL::FromUTF8String("key1_for_2000"));
- orig_2000.push_back(DPL::FromUTF8String("key2_for_2000"));
-
- WidgetPropertyKeyList orig_2001;
- orig_2001.push_back(DPL::FromUTF8String("key1_for_2001"));
-
- WidgetPropertyKeyList orig_2002;
- orig_2002.push_back(DPL::FromUTF8String("key1_for_2002"));
- orig_2002.push_back(DPL::FromUTF8String("key2_for_2002"));
-
- std::map<WidgetHandle, WidgetPropertyKeyList *> prefsKeyMap;
- prefsKeyMap.insert(std::pair<WidgetHandle, WidgetPropertyKeyList *>(
- 2000, &orig_2000));
- prefsKeyMap.insert(std::pair<WidgetHandle, WidgetPropertyKeyList *>(
- 2001, &orig_2001));
- prefsKeyMap.insert(std::pair<WidgetHandle, WidgetPropertyKeyList *>(
- 2002, &orig_2002));
-
- FOREACH(it_out, prefsKeyMap) {
- WidgetPropertyKeyList got = PropertyDAOReadOnly::GetPropertyKeyList(
- it_out->first);
- RUNNER_ASSERT(got.size() == it_out->second->size());
- //TODO
- // FOREACH(it_in, got)
- // {
- // RUNNER_ASSERT(it_out->second.
- // }
- }
- }
-}
-
-RUNNER_TEST(property_dao_set_update_remove)
-{
- WidgetPropertyKeyList keys = PropertyDAOReadOnly::GetPropertyKeyList(2000);
-
- //ADD
- PropertyDAO::SetProperty(2000,
- DPL::FromUTF8String("new_key"),
- DPL::FromUTF8String("new_value1"));
-
- RUNNER_ASSERT_MSG(
- keys.size() + 1 == PropertyDAOReadOnly::GetPropertyKeyList(2000).size(),
- "new property not added");
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(
- PropertyDAOReadOnly::GetPropertyValue(2000,
- DPL::FromUTF8String("new_key")),
- "new_value1");
-
- //UPDATE
- PropertyDAO::SetProperty(2000,
- DPL::FromUTF8String("new_key"),
- DPL::FromUTF8String("new_value2"));
- RUNNER_ASSERT_MSG(
- keys.size() + 1 == PropertyDAOReadOnly::GetPropertyKeyList(2000).size(),
- "new property not added");
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(
- PropertyDAOReadOnly::GetPropertyValue(2000,
- DPL::FromUTF8String("new_key")),
- "new_value2");
-
- //REMOVE
- PropertyDAO::RemoveProperty(2000, DPL::FromUTF8String("new_key"));
-
- RUNNER_ASSERT_MSG(
- keys.size() == PropertyDAOReadOnly::GetPropertyKeyList(2000).size(),
- "property not removed");
-
-}
-
-RUNNER_TEST(property_dao_get_value)
-{
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(
- PropertyDAOReadOnly::GetPropertyValue(
- 2000, DPL::FromUTF8String("key1_for_2000")),
- "value_for_key1_2000");
-
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(
- PropertyDAOReadOnly::GetPropertyValue(
- 2000, DPL::FromUTF8String("key2_for_2000")),
- "value_for_key2_2000");
-}
-
-#undef RUNNER_ASSERT_WHAT_EQUALS
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file TestCases_WidgetDAO.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file contains tests for widget dao class.
- */
-
-#include <list>
-#include <cstdlib>
-#include <cstdio>
-#include <string>
-#include <dpl/test/test_runner.h>
-#include <dpl/foreach.h>
-#include <dpl/exception.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <widget_install/wac_security.h>
-#include <localization_utils.h>
-#include <wrt_db_types.h>
-#include <wrt_plugin_export.h>
-
-using namespace WrtDB;
-using namespace Jobs::WidgetInstall;
-using namespace LocalizationUtils;
-
-namespace {
-
-WidgetHandle _registerWidget(const WidgetRegisterInfo& regInfo,
- const IWacSecurity& sec,
- int line)
-{
- WidgetHandle handle = INVALID_WIDGET_HANDLE;
- Try {
- auto previous = WidgetDAO::getHandleList();
-
- // register widget
- handle = WidgetDAO::registerWidget(regInfo,
- sec,
- GetUserAgentLanguageTags());
-
- RUNNER_ASSERT_MSG(handle != INVALID_WIDGET_HANDLE,
- "(called from line " << line << ")");
-
- auto current = WidgetDAO::getHandleList();
- RUNNER_ASSERT_MSG(previous.size()+1 == current.size(),
- "(called from line " << line << ")");
-
- RUNNER_ASSERT_MSG(WidgetDAO::isWidgetInstalled(handle),
- "(called from line " << line << ")");
- }
- Catch (WidgetDAO::Exception::AlreadyRegistered) {
- RUNNER_ASSERT_MSG(
- false,
- "Unexpected exception (called from line " << line << ")");
- }
- return handle;
-}
-
-#define REGISTER_WIDGET(regInfo, sec) _registerWidget((regInfo),(sec), __LINE__)
-
-} // namespace
-
-// Widgets used <2300,2500), 2000, 2001, 2002, 2003
-
-#define RUNNER_ASSERT_WHAT_EQUALS(in, test) \
- {std::string tmp(in); \
- RUNNER_ASSERT_MSG(tmp == test, "Equals: [" + tmp + "]");}
-
-#define RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(in, test) \
- { \
- if(in.IsNull()) RUNNER_ASSERT_MSG(false, "NULL"); \
- else RUNNER_ASSERT_WHAT_EQUALS(DPL::ToUTF8String(*in),test);\
- }
-
-#define RUNNER_ASSERT_WHAT_EQUALS_OPTIONALINT(in, test) \
- { \
- if(in.IsNull()) RUNNER_ASSERT_MSG(false, "NULL"); \
- else RUNNER_ASSERT_MSG(*in == test, "Equals: [" + *in + "]"); \
- }
-
-//2300
-RUNNER_TEST(widget_dao_test_register_widget_empty_strings)
-{
- WidgetRegisterInfo regInfo;
-
- //ext info
- regInfo.shareHref = "";
- regInfo.isFactoryWidget = 0;
-
- //info
- regInfo.configInfo.widget_id = DPL::FromUTF8String("");
- regInfo.configInfo.version = DPL::FromUTF8String("");
- regInfo.configInfo.width = 10;
- regInfo.configInfo.height = 10;
- regInfo.configInfo.authorName = DPL::FromUTF8String("");
- regInfo.configInfo.authorEmail = DPL::FromUTF8String("");
- regInfo.configInfo.authorHref = DPL::FromUTF8String("");
- regInfo.baseFolder = "";
- //TODO authenticated, etc...
- regInfo.configInfo.flashNeeded = false;
- regInfo.configInfo.minVersionRequired = 1.0;
- regInfo.configInfo.backSupported = 1.0;
-
- //loc info
- ConfigParserData::LocalizedData locData;
- locData.name = DPL::FromUTF8String("");
- locData.shortName = DPL::FromUTF8String("");
- locData.description = DPL::FromUTF8String("");
- locData.license = DPL::FromUTF8String("");
- locData.licenseFile = DPL::FromUTF8String("");
- locData.licenseHref = DPL::FromUTF8String("");
- regInfo.configInfo.localizedDataSet.insert(
- std::make_pair(DPL::FromUTF8String("en"),locData));
-
- //userAgentLoc
-
- //icons
- ConfigParserData::Icon icon(DPL::FromUTF8String(""));
- icon.width = 10;
- icon.height = 10;
- LocaleSet locs;
- locs.insert(DPL::FromUTF8String("en"));
- WidgetRegisterInfo::LocalizedIcon locIcon(icon,locs);
- regInfo.localizationData.icons.push_back(locIcon);
-
- //start file
- WidgetRegisterInfo::StartFileProperties prop;
- prop.encoding = DPL::FromUTF8String("");
- prop.type = DPL::FromUTF8String("");
- WidgetRegisterInfo::LocalizedStartFile file;
- file.path = DPL::FromUTF8String("");
- file.propertiesForLocales.insert(
- std::make_pair(DPL::FromUTF8String("en"), prop));
- regInfo.localizationData.startFiles.push_back(file);
-
- //widget pref
- ConfigParserData::Preference pref(DPL::FromUTF8String(""),false);
- pref.value = DPL::FromUTF8String("");
- regInfo.configInfo.preferencesList.insert(pref);
-
- //widget feature
- ConfigParserData::Feature feat(DPL::FromUTF8String(""),false);
- ConfigParserData::Param par(DPL::FromUTF8String(("")));
- par.value = DPL::FromUTF8String("");
- feat.paramsList.insert(par);
- regInfo.configInfo.featuresList.insert(feat);
-
- //win modes
- regInfo.configInfo.windowModes.insert(DPL::FromUTF8String(""));
-
- //WARP info
- ConfigParserData::AccessInfo access(DPL::FromUTF8String(""),true);
- regInfo.configInfo.accessInfoSet.insert(access);
-
- //certificates
- WidgetCertificateData cert;
- cert.owner = WidgetCertificateData::AUTHOR;
- cert.type = WidgetCertificateData::ROOT;
- cert.chainId = 1;
- cert.strMD5Fingerprint = "";
- cert.strSHA1Fingerprint = "";
- cert.strCommonName = DPL::FromUTF8String("");
-
- WacSecurity security;
- security.getCertificateListRef().push_back(cert);
-
- //powder
- // TODO
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo,security);
- RUNNER_ASSERT_MSG(handle > 2003, "Widget register failed");
-}
-
-RUNNER_TEST(widget_dao_test_twice_install_same_widget)
-{
- WacSecurity sec;
- {
- WidgetRegisterInfo regInfo;
- REGISTER_WIDGET(regInfo, sec);
- }
- {
- WidgetRegisterInfo regInfo;
- REGISTER_WIDGET(regInfo, sec);
- }
-
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_minimum_info)
-{
- WacSecurity sec;
- const std::size_t NUMBER_OF_WIDGETS = 5;
-
- DPL::Optional<WidgetHandle> lastHandle;
-
- for (std::size_t number = 0; number < NUMBER_OF_WIDGETS; ++number)
- {
- WidgetRegisterInfo regInfo;
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- lastHandle = handle;
-
- WidgetDAO dao(handle);
- //TODO check nulls
- }
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_info)
-{
- WacSecurity sec;
- const std::size_t NUMBER_OF_WIDGETS = 5;
-
- DPL::Optional<WidgetHandle> lastHandle;
- for (std::size_t number = 0; number < NUMBER_OF_WIDGETS; ++number)
- {
- std::ostringstream str;
- str << "register_info_test_" << number;
-
- WidgetRegisterInfo regInfo;
- regInfo.configInfo.widget_id = DPL::FromUTF8String(str.str());
- regInfo.configInfo.version = DPL::FromUTF8String(str.str());
- regInfo.configInfo.width = 10;
- regInfo.configInfo.height = 10;
- regInfo.configInfo.authorName = DPL::FromUTF8String(str.str());
- regInfo.configInfo.authorEmail = DPL::FromUTF8String(str.str());
- regInfo.configInfo.authorHref = DPL::FromUTF8String(str.str());
- regInfo.baseFolder = str.str(); //base folder at the end has /
- regInfo.configInfo.flashNeeded = false;
- //TODO authenticated, etc...
- regInfo.configInfo.minVersionRequired = 1.0;
- regInfo.configInfo.backSupported = true;
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- RUNNER_ASSERT_MSG(lastHandle.IsNull() || *lastHandle < handle,
- "Widget handles should grow");
- lastHandle = handle;
-
- WidgetDAO dao(handle);
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getGUID(), str.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getVersion(), str.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getAuthorName(), str.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getAuthorEmail(), str.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getAuthorHref(), str.str());
- RUNNER_ASSERT_WHAT_EQUALS(dao.getBaseFolder(), str.str() + "/");
- RUNNER_ASSERT(dao.getWebkitPluginsRequired() == false);
-// RUNNER_ASSERT(
-// dao.GetWidgetSecurityDomain() == WacSecurity::Trusted);
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getMinimumWacVersion(), "1");
- }
-
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_extended_info)
-{
- WacSecurity sec;
- const std::size_t NUMBER_OF_WIDGETS = 5;
-
- DPL::Optional<WidgetHandle> lastHandle;
- for (std::size_t number = 0; number < NUMBER_OF_WIDGETS; ++number)
- {
- std::ostringstream str;
- str << "register_ext_info_test_" << number;
-
- WidgetRegisterInfo regInfo;
-
-// regInfo.shareHref = str.str();
- regInfo.isFactoryWidget = 0;
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- RUNNER_ASSERT_MSG(lastHandle.IsNull() || *lastHandle < handle,
- "Widget handles should grow");
- lastHandle = handle;
-
- WidgetDAO dao(handle);
-// RUNNER_ASSERT_WHAT_EQUALS(dao.GetShareHref(), str.str());
- RUNNER_ASSERT(dao.isFactory() == false);
- RUNNER_ASSERT(dao.isDeletable() == true);
- }
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_localized_info)
-{
- WacSecurity sec;
- const std::size_t NUMBER_OF_WIDGETS = 5;
-
- DPL::Optional<WidgetHandle> lastHandle;
- for (std::size_t number = 0; number < NUMBER_OF_WIDGETS; ++number)
- {
- WidgetRegisterInfo regInfo;
- std::ostringstream str_en;
- std::ostringstream str_pl;
- str_en << "register_loc_info_test_en_" << number;
- str_pl<< "register_loc_info_test_pl_" << number;
- {//EN
- ConfigParserData::LocalizedData locDataEn;
- locDataEn.name = DPL::FromUTF8String(str_en.str());
- locDataEn.shortName = DPL::FromUTF8String(str_en.str());
- locDataEn.description = DPL::FromUTF8String(str_en.str());
- locDataEn.license = DPL::FromUTF8String(str_en.str());
- locDataEn.licenseFile = DPL::FromUTF8String(str_en.str());
- locDataEn.licenseHref = DPL::FromUTF8String(str_en.str());
- regInfo.configInfo.localizedDataSet.insert(
- std::make_pair(DPL::FromUTF8String("en"),locDataEn));
- }
-
- {//PL
- ConfigParserData::LocalizedData locDataPl;
- locDataPl.name = DPL::FromUTF8String(str_pl.str());
- locDataPl.shortName = DPL::FromUTF8String(str_pl.str());
- locDataPl.description = DPL::FromUTF8String(str_pl.str());
- locDataPl.license = DPL::FromUTF8String(str_pl.str());
- locDataPl.licenseFile = DPL::FromUTF8String(str_pl.str());
- locDataPl.licenseHref = DPL::FromUTF8String(str_pl.str());
- regInfo.configInfo.localizedDataSet.insert(
- std::make_pair(DPL::FromUTF8String("pl"),locDataPl));
- }
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- RUNNER_ASSERT_MSG(lastHandle.IsNull() || *lastHandle < handle,
- "Widget handles should grow");
- lastHandle = handle;
-
- WidgetDAO dao(handle);
- RUNNER_ASSERT_MSG(dao.getLanguageTags().size() == 2,
- "language tags list invalid");
-
- {//EN
- WidgetLocalizedInfo locInfo =
- dao.getLocalizedInfo(DPL::FromUTF8String("en"));
-
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.name,
- str_en.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.shortName,
- str_en.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.description,
- str_en.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.license,
- str_en.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.licenseHref,
- str_en.str());
- }
-
- {//PL
- WidgetLocalizedInfo locInfo =
- dao.getLocalizedInfo(DPL::FromUTF8String("pl"));
-
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.name,
- str_pl.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.shortName,
- str_pl.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.description,
- str_pl.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.license,
- str_pl.str());
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(locInfo.licenseHref,
- str_pl.str());
- }
- }
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_user_agent_loc)
-{
- RUNNER_TODO_MSG("not yet implemented");
- WacSecurity sec;
- WidgetRegisterInfo regInfo;
-
- // register widget
- REGISTER_WIDGET(regInfo, sec);
- // TODO what to check? there's no way to read user agent locale
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_icons)
-{
- WacSecurity sec;
- WidgetRegisterInfo regInfo;
-
- ConfigParserData::Icon icon(L"icon1");
- icon.width = 10;
- icon.height = 10;
- LocaleSet locs;
- locs.insert(DPL::FromUTF8String("en"));
- WidgetRegisterInfo::LocalizedIcon locIcon(icon,locs);
- regInfo.localizationData.icons.push_back(locIcon);
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- WidgetDAO dao(handle);
- WidgetDAOReadOnly::WidgetIconList list = dao.getIconList();
-
- RUNNER_ASSERT(list.size() == regInfo.localizationData.icons.size());
- WidgetDAOReadOnly::WidgetIconList::const_iterator it1 = list.begin();
- WidgetRegisterInfo::LocalizedIconList::const_iterator it2 =
- regInfo.localizationData.icons.begin();
- for(;it1!=list.end() && it2!=regInfo.localizationData.icons.end();
- ++it1,++it2)
- {
- RUNNER_ASSERT(it2->height == it1->iconHeight);
- RUNNER_ASSERT(it2->width == it1->iconWidth);
- RUNNER_ASSERT(it2->src == it1->iconSrc);
- RUNNER_ASSERT(it2->availableLocales == locs);
- }
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_start_files)
-{
- WacSecurity sec;
-
- WidgetRegisterInfo::LocalizedStartFileList files;
- WidgetRegisterInfo::StartFilePropertiesForLocalesMap map1;
- WidgetRegisterInfo::StartFileProperties prop1;
- prop1.encoding = DPL::FromUTF8String("enc1");
- prop1.type = DPL::FromUTF8String("type1");
-
- map1.insert(std::make_pair(DPL::FromUTF8String("en"),prop1));
- map1.insert(std::make_pair(DPL::FromUTF8String("pl"),prop1));
-
- WidgetRegisterInfo::LocalizedStartFile file1;
- WidgetRegisterInfo::LocalizedStartFile file2;
- file1.path = DPL::FromUTF8String("path1");
- file1.propertiesForLocales = map1;
- file2.path = DPL::FromUTF8String("path2");
- file2.propertiesForLocales = map1;
-
- files.push_back(file1);
- files.push_back(file1);
-
- WidgetRegisterInfo regInfo;
- regInfo.localizationData.startFiles = files;
-
- REGISTER_WIDGET(regInfo, sec);
-
- //TODO no getter in WidgetDAO (getter in LocalizedWidgetDAO,
- // but it will be removed
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_features)
-{
- WacSecurity sec;
- ConfigParserData::FeaturesList features;
- features.insert(ConfigParserData::Feature(DPL::FromUTF8String("f1"),true));
- features.insert(ConfigParserData::Feature(DPL::FromUTF8String("f2")));
- features.insert(ConfigParserData::Feature(DPL::FromUTF8String("f3"),
- false));
-
- WidgetRegisterInfo regInfo;
- FOREACH(it, features)
- regInfo.configInfo.featuresList.insert(*it);
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- WidgetDAO dao(handle);
- WidgetFeatureSet out = dao.getFeaturesList();
- RUNNER_ASSERT_MSG(out.size() == features.size(),
- "wrong number of features");
-// FOREACH(it, out)
-// RUNNER_ASSERT(features.find(*it) != features.end());
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_win_modes)
-{
- WacSecurity sec;
- std::set<DPL::String> modes;
- modes.insert(DPL::FromUTF8String("full"));
- modes.insert(DPL::FromUTF8String("window"));
-
- WidgetRegisterInfo regInfo;
-
- FOREACH(it, modes)
- regInfo.configInfo.windowModes.insert(*it);
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- WidgetDAO dao(handle);
- std::list<DPL::String> wins = dao.getWindowModes();
- RUNNER_ASSERT_MSG(modes.size() == wins.size(),
- "wrong number of window modes");
- FOREACH(it, wins)
- RUNNER_ASSERT(modes.find(*it) != modes.end());
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_warp_info)
-{
- WacSecurity sec;
- ConfigParserData::AccessInfoSet orig;
- orig.insert(ConfigParserData::AccessInfo(DPL::FromUTF8String("iri1"),
- true));
- orig.insert(ConfigParserData::AccessInfo(DPL::FromUTF8String("iri2"),
- false));
- orig.insert(ConfigParserData::AccessInfo(DPL::FromUTF8String("iri3"),
- true));
-
- WidgetRegisterInfo regInfo;
- FOREACH(it, orig)
- regInfo.configInfo.accessInfoSet.insert(*it);
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- WidgetDAO dao(handle);
-
- WidgetAccessInfoList out;
- dao.getWidgetAccessInfo(out);
- RUNNER_ASSERT_MSG(out.size() == orig.size(),
- "wrong number of access info elem");
- FOREACH(it, out){
- ConfigParserData::AccessInfo tmp(it->strIRI,it->bSubDomains);
- RUNNER_ASSERT(orig.find(tmp) != orig.end());
- }
-}
-
-RUNNER_TEST(widget_dao_test_register_widget_certificates)
-{
- WacSecurity sec;
- WidgetRegisterInfo regInfo;
-
- WidgetCertificateData cert;
- cert.owner = WidgetCertificateData::AUTHOR;
- cert.type = WidgetCertificateData::ROOT;
- cert.chainId = 1;
- cert.strMD5Fingerprint = "md5";
- cert.strSHA1Fingerprint = "sha1";
- cert.strCommonName = DPL::FromUTF8String("common name");
-
- WidgetCertificateDataList& certListRef = sec.getCertificateListRef();
- certListRef.push_back(cert);
-
- // register widget
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- WidgetDAO dao(handle);
-
- // certificates
- WidgetCertificateDataList recList = dao.getCertificateDataList();
- RUNNER_ASSERT(recList.size() == certListRef.size());
-
- auto recListIt = recList.begin();
- auto certListIt = certListRef.begin();
- for(;recListIt != recList.end() && certListIt != certListRef.end();
- ++recListIt,++certListIt)
- {
- RUNNER_ASSERT(recListIt->chainId == certListIt->chainId);
- RUNNER_ASSERT(recListIt->owner == certListIt->owner);
- RUNNER_ASSERT(recListIt->strCommonName == certListIt->strCommonName);
- RUNNER_ASSERT(recListIt->strMD5Fingerprint ==
- certListIt->strMD5Fingerprint);
- RUNNER_ASSERT(recListIt->strSHA1Fingerprint ==
- certListIt->strSHA1Fingerprint);
- RUNNER_ASSERT(recListIt->type == certListIt->type);
- }
-
- // fingerprints
- RUNNER_ASSERT(dao.getKeyFingerprints(WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ENDENTITY).empty());
- RUNNER_ASSERT(dao.getKeyFingerprints(WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY).empty());
- RUNNER_ASSERT(dao.getKeyFingerprints(WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ROOT).empty());
-
- FingerPrintList fingerprints = dao.getKeyFingerprints(
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ROOT);
-
- RUNNER_ASSERT(fingerprints.size() == certListRef.size()*2);
- FOREACH(it, certListRef)
- {
- auto md5 = std::find(fingerprints.begin(),
- fingerprints.end(),
- it->strMD5Fingerprint);
- RUNNER_ASSERT(md5 != fingerprints.end());
-
- auto sha = std::find(fingerprints.begin(),
- fingerprints.end(),
- it->strSHA1Fingerprint);
- RUNNER_ASSERT(sha != fingerprints.end());
- }
-
- // common names
- RUNNER_ASSERT(dao.getKeyCommonNameList(WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ENDENTITY).empty());
- RUNNER_ASSERT(dao.getKeyCommonNameList(WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY).empty());
- RUNNER_ASSERT(dao.getKeyCommonNameList(WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ROOT).empty());
-
- FingerPrintList commonNames = dao.getKeyCommonNameList(
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ROOT);
-
- RUNNER_ASSERT(commonNames.size() == certListRef.size());
- FOREACH(it, certListRef)
- {
- auto cn = std::find(commonNames.begin(),
- commonNames.end(),
- DPL::ToUTF8String(it->strCommonName));
- RUNNER_ASSERT(cn != commonNames.end());
- }
-}
-
-namespace {
-
-const DPL::String categories[] =
- {L"nu",L"se",L"vi",L"la",L"dr",L"ga",L"ha",L"ug"};
-const size_t categoriesLength = sizeof(categories)/sizeof(categories[0]);
-const DPL::String contextValues[] = {L"xa",L"xb",L"xc",L"xd",L"xe"};
-const size_t contextValuesLength =
- sizeof(contextValues)/sizeof(contextValues[0]);
-const size_t levelCount = 3;
-
-void randomEntries(Powder::Description& description,const DPL::String& category)
-{
- Powder::Description::CategoryEntry& categoryEntry =
- description.categories[category];
- for(size_t e = 0;e<levelCount;++e) {
- // random entry level
- Powder::Description::LevelEntry entry;
- entry.level = static_cast<Powder::Description::LevelEnum>(
- random() % (Powder::Description::LevelUnknown + 1));
-
- /*
- * Random context value between 1 and (2^contextValuesLength-1).
- * Every bit corresponds to a single flag from contextValues.
- */
- size_t context = random() % (1<<contextValuesLength);
- for(size_t c=0;c<contextValuesLength;++c) {
- if((context & (1<<c)) > 0) {
- entry.context.insert(contextValues[c]);
- }
- }
- categoryEntry.levels.push_back(entry);
- }
-}
-
-template <typename T>
-void equalityCheck(const std::string& comment, const T& a1, const T& a2)
-{
- RUNNER_ASSERT_MSG(a1 == a2, comment << a1 << " not equal to " << a2);
-}
-
-} // namespace
-
-//2365
-RUNNER_TEST(widget_dao_test_register_widget_powder)
-{
- using namespace Powder;
-
- WacSecurity sec;
- WidgetRegisterInfo regInfo;
-
- srandom(static_cast<int>(time(0)));
-
- // random age rating
- regInfo.powderDescription.ageRating = random() % 100 + 1;
-
- // create categories
- for(size_t c=0;c<categoriesLength;++c) {
- randomEntries(regInfo.powderDescription,categories[c]);
- }
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- WidgetDAO dao(handle);
- Description desc = dao.getPowderDescription();
-
- // TODO: age rating is not stored anywhere
- // compare age
- equalityCheck("Age rating ",
- regInfo.powderDescription.ageRating,
- desc.ageRating);
-
- // compare categories count
- equalityCheck("Categories count ",
- regInfo.powderDescription.categories.size(),
- desc.categories.size());
-
- Description::CategoryEntries::const_iterator it1 =
- regInfo.powderDescription.categories.begin();
- Description::CategoryEntries::const_iterator it2 =
- desc.categories.begin();
- for(;it2!= desc.categories.end();++it1,++it2) {
- LogDebug("Category " << it1->first << "/" << it2->first);
- // compare categories names
- equalityCheck("Category ",it1->first,it2->first);
- // compare level count
- equalityCheck("Levels count ",
- it1->second.levels.size(),
- it2->second.levels.size());
-
- auto lit1 = it1->second.levels.begin();
- auto lit2 = it2->second.levels.begin();
- for(;lit2!=it2->second.levels.end() && lit1!=it1->second.levels.end();
- ++lit1,++lit2)
- {
- LogDebug("Level " << lit1->level << "/" << lit2->level);
- // compare levels
- equalityCheck("Level ",lit1->level,lit2->level);
- // compare context entries
- RUNNER_ASSERT_MSG(lit1->context == lit2->context,
- "context entries do not match");
- }
- }
-}
-
-RUNNER_TEST(widget_dao_test_is_widget_installed)
-{
- RUNNER_ASSERT(WidgetDAO::isWidgetInstalled(2000));
-
- WacSecurity sec;
- WidgetRegisterInfo regInfo;
-
- WidgetHandle widgetHandle = REGISTER_WIDGET(regInfo, sec);
-
- RUNNER_ASSERT(WidgetDAO::isWidgetInstalled(widgetHandle));
-}
-
-RUNNER_TEST(widget_dao_test_unregister_widget)
-{
- WacSecurity sec;
- WidgetHandleList handles = WidgetDAO::getHandleList();
-
- WidgetRegisterInfo regInfo;
-
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- WidgetDAO::unregisterWidget(handle);
-
- RUNNER_ASSERT_MSG(handles.size() == WidgetDAO::getHandleList().size(),
- "Widget unregister failed");
-}
-
-RUNNER_TEST(widget_dao_test_get_widget_handle_list)
-{
- WidgetHandleList handles = WidgetDAO::getHandleList();
- RUNNER_ASSERT(handles.size() >= 3);
-}
-
-RUNNER_TEST(widget_dao_test_get_widget_attributes)
-{
- {
- WidgetHandle handle = 2000;
- WidgetDAO dao(handle);
-
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getGUID(), "w_id_2000");
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getVersion(), "1.0.0");
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getAuthorName(), "a_name_2000");
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getAuthorEmail(),
- "a_email_2000");
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getAuthorHref(), "a_href_2000");
- RUNNER_ASSERT_WHAT_EQUALS(dao.getBaseFolder(), "basef_2000/");
- RUNNER_ASSERT(dao.getWebkitPluginsRequired() == true);
- RUNNER_ASSERT(dao.getChildProtection().enabled == true);
- RUNNER_ASSERT_WHAT_EQUALS_OPTIONAL(dao.getMinimumWacVersion(), "1.0");
- }
-}
-
-RUNNER_TEST(widget_dao_test_localization)
-{
- WacSecurity sec;
-
- // icon
- WidgetRegisterInfo regInfo;
- ConfigParserData::Icon icon(L"icon1");
- icon.width = 10;
- icon.height = 10;
- LocaleSet locs;
- locs.insert(DPL::FromUTF8String("en"));
- locs.insert(DPL::FromUTF8String("pl"));
- WidgetRegisterInfo::LocalizedIcon locIcon(icon,locs);
- regInfo.localizationData.icons.push_back(locIcon);
-
- //start file
- WidgetRegisterInfo::StartFileProperties prop_en;
- prop_en.encoding = DPL::FromUTF8String("encoding_en");
- prop_en.type = DPL::FromUTF8String("type_en");
-
- WidgetRegisterInfo::StartFileProperties prop_pl;
- prop_pl.encoding = DPL::FromUTF8String("encoding_pl");
- prop_pl.type = DPL::FromUTF8String("type_pl");
-
- WidgetRegisterInfo::LocalizedStartFile file;
- file.path = DPL::FromUTF8String("path");
- file.propertiesForLocales.insert(
- std::make_pair(DPL::FromUTF8String("en"), prop_en));
- file.propertiesForLocales.insert(
- std::make_pair(DPL::FromUTF8String("pl"), prop_pl));
- regInfo.localizationData.startFiles.push_back(file);
-
- // register widget
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
-
- WidgetDAO dao(handle);
-
- // check localized icons
- WidgetDAO::WidgetLocalizedIconList locList = dao.getLocalizedIconList();
- RUNNER_ASSERT(locList.size() == locs.size());
-
- // non-localized icon
- WidgetDAO::WidgetIconList list = dao.getIconList();
- int iconId = list.front().iconId;
-
- // compare every icon with the origin
- auto locsIt = locs.begin();
- auto iconIt = locList.begin();
- for(;locsIt!=locs.end() && iconIt!=locList.end();++locsIt,++iconIt) {
- RUNNER_ASSERT(iconIt->appId == handle);
- RUNNER_ASSERT(iconIt->iconId == iconId);
- RUNNER_ASSERT(iconIt->widgetLocale == *locsIt);
- }
-
- // localized start file list
- WidgetDAO::LocalizedStartFileList fList = dao.getLocalizedStartFileList();
- RUNNER_ASSERT(fList.size() == file.propertiesForLocales.size());
-
- int startFileId = dao.getStartFileList().front().startFileId;
-
- FOREACH(it,fList)
- {
- RUNNER_ASSERT(it->appId == handle);
- auto propIt = file.propertiesForLocales.find(it->widgetLocale);
- RUNNER_ASSERT(propIt != file.propertiesForLocales.end());
- RUNNER_ASSERT(it->encoding == propIt->second.encoding);
- RUNNER_ASSERT(it->type == propIt->second.type);
- RUNNER_ASSERT(it->startFileId == startFileId);
- }
-}
-
-RUNNER_TEST(widget_dao_test_wac_security)
-{
- WacSecurity sec;
- WidgetRegisterInfo regInfo;
- {
- // register widget
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
- WidgetDAO dao(handle);
-
- RUNNER_ASSERT(!dao.isDistributorSigned());
- RUNNER_ASSERT(!dao.isRecognized());
- RUNNER_ASSERT(!dao.isWacSigned());
- }
- sec.setDistributorSigned(true);
- sec.setRecognized(true);
- sec.setWacSigned(true);
- {
- // register widget
- WidgetHandle handle = REGISTER_WIDGET(regInfo, sec);
- WidgetDAO dao(handle);
-
- RUNNER_ASSERT(dao.isDistributorSigned());
- RUNNER_ASSERT(dao.isRecognized());
- RUNNER_ASSERT(dao.isWacSigned());
- }
-}
-
-#undef RUNNER_ASSERT_WHAT_EQUALS
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file tests_plugin_dao.cpp
- * @author Pawel Sikorski (p.sikorski@samsung.com)
- * @version 1.0
- * @brief This file contains tests for plugin dao class.
- */
-
-#include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
-#include <WrtDatabase.h>
-#include <loop_control.h>
-
-using namespace LoopControl;
-
-int main (int argc, char *argv[])
-{
- int ret = system("/usr/bin/wrt_dao_tests_prepare_db.sh start");
- if (ret != 0) {
- LogError("Preparation script has return error: " << ret
- << ". Quitting");
- return -1;
- }
-
- init_loop(argc, argv);
-
- WrtDB::WrtDatabase::attachToThread();
-
- LogInfo("Starting tests");
- int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
-
- WrtDB::WrtDatabase::detachFromThread();
-
- quit_loop();
-
- ret = system("/usr/bin/wrt_dao_tests_prepare_db.sh stop");
- if (ret != 0) {
- LogError("Finalization script has return error: " << ret);
- return -1;
- }
- return status;
-}
+++ /dev/null
-#!/bin/sh
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-WRT_DB=/opt/dbspace/.wrt.db
-WRT_DB_BCK=/tmp/wrt.db_backup
-
-if [ "x$1" == "xstart" ]; then
- echo start;
- cp $WRT_DB $WRT_DB_BCK
- wrt_create_clean_db.sh
-
- #simple plugins
- INS_MIN_PLUGINPROP="insert into PluginProperties(PluginPropertiesId, InstallationState, PluginLibraryName"
- INS_ALL_PLUGINPROP="insert into PluginProperties(PluginPropertiesId, InstallationState, PluginLibraryName, PluginLibraryPath, InstallURI, KeyCN, RootKeyCN, rootKeyFingerprint)"
- INS_PLUGIN_OBJECTS="insert into PluginImplementedObjects(PluginObject, PluginPropertiesId)"
-
- sqlite3 $WRT_DB "${INS_MIN_PLUGINPROP}) VALUES(1, 1, 'plugin1')";
- sqlite3 $WRT_DB "${INS_MIN_PLUGINPROP}, PluginLibraryPath) VALUES(2, 1, 'plugin2', 'path_to_plugin2')";
- sqlite3 $WRT_DB "${INS_MIN_PLUGINPROP}, InstallURI) VALUES(3, 1, 'plugin3', 'uri_to_plugin3')";
- sqlite3 $WRT_DB "${INS_ALL_PLUGINPROP} VALUES(4, 1, 'p4', 'path_to_p4', 'uri_to_p4', 'keycn_to_p4', 'rkey_to_p4', 'rkeyF_to_p4')";
- sqlite3 $WRT_DB "${INS_ALL_PLUGINPROP} VALUES(5, 1, 'p5', 'path_to_p5', 'uri_to_p5', 'keycn_to_p5', 'rkey_to_p5', 'rkeyF_to_p5')";
-
- #plugin dependendencies
- #sqlite3 $WRT_DB "${INS_PLUGIN_OBJECTS} VALUES(1, )";
- sqlite3 $WRT_DB "${INS_PLUGIN_OBJECTS} VALUES('', 2)";
- sqlite3 $WRT_DB "${INS_PLUGIN_OBJECTS} VALUES('Plugin_3_Object_A', 3)";
- sqlite3 $WRT_DB "${INS_PLUGIN_OBJECTS} VALUES('Plugin_4_Object_A', 4)";
- sqlite3 $WRT_DB "${INS_PLUGIN_OBJECTS} VALUES('Plugin_4_Object_B', 4)";
- sqlite3 $WRT_DB "${INS_PLUGIN_OBJECTS} VALUES('Plugin_4_Object_C', 4)";
- sqlite3 $WRT_DB "${INS_PLUGIN_OBJECTS} VALUES('Plugin_5_Object_A', 5)";
-
-
- #simple features
- INS_ALL_FEATURESLIST="insert into FeaturesList(FeatureUUID, FeatureName, PluginPropertiesId)"
- sqlite3 $WRT_DB "${INS_ALL_FEATURESLIST} VALUES(1, 'feature1', 1)";
- sqlite3 $WRT_DB "${INS_ALL_FEATURESLIST} VALUES(2, 'feature2', 4)";
- sqlite3 $WRT_DB "${INS_ALL_FEATURESLIST} VALUES(3, 'feature3', 4)";
- sqlite3 $WRT_DB "${INS_ALL_FEATURESLIST} VALUES(4, 'feature4', 4)";
-
- #device capabilities
- INS_ALL_DEVICECAPS="insert into DeviceCapabilities(DeviceCapID, DeviceCapName, DeviceCapDefaultValue)"
- sqlite3 $WRT_DB "${INS_ALL_DEVICECAPS} VALUES(1, 'devicecap1', 1)";
- sqlite3 $WRT_DB "${INS_ALL_DEVICECAPS} VALUES(2, 'devicecap2', 2)";
- sqlite3 $WRT_DB "${INS_ALL_DEVICECAPS} VALUES(3, 'devicecap3', 3)";
- sqlite3 $WRT_DB "${INS_ALL_DEVICECAPS} VALUES(4, 'devicecap4', 4)";
-
- #DefferedWidgetPackageInstallation
- INS_ALL_DEFERRED="insert into DefferedWidgetPackageInstallation(path)"
- sqlite3 $WRT_DB "${INS_ALL_DEFERRED} VALUES('widgetpackage1')";
- sqlite3 $WRT_DB "${INS_ALL_DEFERRED} VALUES('widgetpackage2')";
- sqlite3 $WRT_DB "${INS_ALL_DEFERRED} VALUES('widgetpackage3')";
- sqlite3 $WRT_DB "${INS_ALL_DEFERRED} VALUES('widgetpackage4')";
-
- #Widgets
- INS_ALL_WIDGETEXT="insert into WidgetExtendedInfo(app_id, share_href, signature_type, factory_widget)"
- INS_ALL_WIDGET="insert into WidgetInfo(app_id, widget_id, widget_version, widget_width, widget_height, author_name, author_email, author_href, base_folder, webkit_plugins_required, child_protection, recognized, wac_signed, distributor_signed, min_version)"
- INS_ALL_WIDGET_LOC="insert into LocalizedWidgetInfo(app_id, widget_locale, widget_name, widget_shortname, widget_description, widget_license, widget_license_file, widget_license_href)"
- INS_ALL_USER_AGENT_LOCALES="insert into WidgetUserAgentLocales(app_id, language_tag)"
- INS_ALL_WIDGET_ICONS="insert into WidgetIcon(app_id, icon_src, icon_width, icon_height)"
- INS_ALL_WIDGET_LOC_ICONS="insert into WidgetLocalizedIcon(app_id, icon_id, widget_locale)"
- INS_ALL_WIDGET_STARTFILE="insert into WidgetStartFile(app_id, src)"
- INS_ALL_WIDGET_LOC_STARTFILE="insert into WidgetLocalizedStartFile(app_id, start_file_id, widget_locale, type, encoding)"
- INS_ALL_WIDGET_DEFPREF="insert into WidgetDefaultPreference(app_id, key_name, key_value, readonly)"
- INS_ALL_WIDGET_PREF="insert into WidgetPreference(app_id, key_name, key_value, readonly)"
- INS_ALL_WIDGET_FEATURE="insert into WidgetFeature(app_id, name, required)"
- INS_ALL_WIDGET_FEATURE_PARAM="insert into FeatureParam(widget_feature_id, name, value)"
- INS_ALL_WIDGET_WINMODES="insert into WidgetWindowModes(app_id, window_mode)"
- INS_ALL_WIDGET_WARP="insert into WidgetWARPInfo(app_id, iri, subdomain_access)"
- INS_ALL_WIDGET_CERT="insert into WidgetCertificateFingerprint(app_id, owner, chainid, type, md5_fingerprint, sha1_fingerprint, common_name)"
- INS_ALL_WIDGET_POWDERLEV="insert into PowderLevels(app_id, category, level)"
- INS_ALL_WIDGET_POWDERLEV_CONT="insert into PowderLevelContexts(levelid, context)"
-
-
- sqlite3 $WRT_DB "${INS_ALL_WIDGET} VALUES(2000, 'w_id_2000', '1.0.0', 100, 200, 'a_name_2000', 'a_email_2000', 'a_href_2000', 'basef_2000', 1, 1, 1, 1, 1, '1.0')";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET} VALUES(2001, 'w_id_2001', '2.0.0', 100, 200, 'a_name_2001', 'a_email_2001', 'a_href_2001', 'basef_2001', 1, 1, 1, 1, 1, '0.5')";
- sqlite3 $WRT_DB "insert into WidgetInfo(app_id, child_protection, back_supported) VALUES(2002, 1, 0)";
- sqlite3 $WRT_DB "insert into WidgetInfo(app_id, child_protection, back_supported) VALUES(2003, 1, 0)"; # for properties tests
-
- sqlite3 $WRT_DB "${INS_ALL_WIDGETEXT} VALUES(2000, 'share_href_2000', 0, 0)";
- sqlite3 $WRT_DB "${INS_ALL_WIDGETEXT} VALUES(2001, 'share_href_2001', 0, 0)";
- sqlite3 $WRT_DB "insert into WidgetExtendedInfo(app_id) VALUES(2002)";
- sqlite3 $WRT_DB "insert into WidgetExtendedInfo(app_id) VALUES(2003)";
-
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_LOC} VALUES(2000, 'en', 'w_name_2000_en', 'w_shortname_2000_en', 'w_desc_2000_en', 'w_lic_2000_en', 'w_licf_2000_en', 'w_lic_href_2000_en')";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_LOC} VALUES(2000, 'pl', 'w_name_2000_pl', 'w_shortname_2000_pl', 'w_desc_2000_pl', 'w_lic_2000_pl', 'w_licf_2000_pl', 'w_lic_href_2000_pl')";
- sqlite3 $WRT_DB "insert into LocalizedWidgetInfo(app_id, widget_locale) VALUES(2002, 'en')";
- sqlite3 $WRT_DB "insert into LocalizedWidgetInfo(app_id, widget_locale) VALUES(2003, 'en')";
-
- #TODO not sure what this table represents
- sqlite3 $WRT_DB "${INS_ALL_USER_AGENT_LOCALES} VALUES(2000, 'en')";
- sqlite3 $WRT_DB "${INS_ALL_USER_AGENT_LOCALES} VALUES(2000, 'pl')";
- sqlite3 $WRT_DB "${INS_ALL_USER_AGENT_LOCALES} VALUES(2001, 'en')";
- sqlite3 $WRT_DB "${INS_ALL_USER_AGENT_LOCALES} VALUES(2002, 'en')";
- sqlite3 $WRT_DB "${INS_ALL_USER_AGENT_LOCALES} VALUES(2003, 'en')";
-
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_ICONS} VALUES(2000, 'icon_src_2000', 50, 50)";
- sqlite3 $WRT_DB "insert into WidgetIcon(app_id, icon_src) VALUES(2002, 'icon_src_2002')";
-
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_LOC_ICONS} VALUES(2000, 1, 'en')";
-
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_STARTFILE} VALUES(2000, 'start_file_2000')";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_STARTFILE} VALUES(2001, 'start_file_2001')";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_STARTFILE} VALUES(2002, 'start_file_2002')";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_STARTFILE} VALUES(2003, 'start_file_2003')";
-
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_LOC_STARTFILE} VALUES(2000, 1, 'en', '', '')";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_LOC_STARTFILE} VALUES(2001, 2, 'en', '', '')";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_LOC_STARTFILE} VALUES(2002, 3, 'en', '', '')";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_LOC_STARTFILE} VALUES(2003, 4, 'en', '', '')";
-
- #widget properties
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_PREF} VALUES(2000, 'key1_for_2000', 'value_for_key1_2000', 0)";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_PREF} VALUES(2000, 'key2_for_2000', 'value_for_key2_2000', 0)";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_PREF} VALUES(2001, 'key1_for_2001', 'value1_for_key_2001', 1)";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_PREF} VALUES(2002, 'key1_for_2002', 'value1_for_key_2002', 0)";
- sqlite3 $WRT_DB "${INS_ALL_WIDGET_PREF} VALUES(2002, 'key2_for_2002', 'value2_for_key_2002', 1)";
-
-
- exit $?
-
-elif [ "x$1" == "xstop" ]; then
- echo stop;
- cp $WRT_DB_BCK $WRT_DB
- exit $?
-else
- exit 1
-fi
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file loop_control.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief This is implementation of EFL version of loop control
- */
-
-#include <dpl/log/log.h>
-
-#include <framework_efl.h>
-
-#include <glib.h>
-#include <glib-object.h>
-
-
-namespace LoopControl
-{
-void init_loop(int argc, char *argv[])
-{
- (void)argc;
- (void)argv;
- g_type_init();
- g_thread_init(NULL);
-
- LogInfo("Starting");
- elm_init(argc, argv);
-}
-
-void wait_for_wrt_init()
-{
- ecore_main_loop_begin();
-}
-
-void finish_wait_for_wrt_init()
-{
- ecore_main_loop_quit();
-}
-
-void quit_loop()
-{
- elm_shutdown();
-}
-
-void wrt_start_loop()
-{
- ecore_main_loop_begin();
-}
-
-void wrt_end_loop()
-{
- ecore_main_loop_quit();
-}
-
-void *abstract_window()
-{
- return elm_win_add(NULL, "hello", ELM_WIN_BASIC);
-}
-
-}//end of LoopControl namespace
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file loop_control.cpp
- * @author Jaroslaw Osmanski (j.osmanski@samsung.com)
- * @version 1.0
- * @brief This file is the definitions of loop controlling utilities
- */
-
-
-#ifndef LOOP_CONTROL_H_
-#define LOOP_CONTROL_H_
-
-namespace LoopControl
-{
-
-void init_loop(int argc, char *argv[]);
-void wait_for_wrt_init();
-void finish_wait_for_wrt_init();
-void quit_loop();
-
-void wrt_start_loop();
-void wrt_end_loop();
-
-void *abstract_window();
-
-}
-
-#endif /* LOOP_CONTROL_H_ */
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
-# @author Pawel Sikorski (p.sikorski@samsung.com)
-# @version 1.0
-# @brief
-#
-SET(TARGET_ENGINE_TEST "wrt-tests-engine")
-# Set engine test sources
-FILE(GLOB ENGINE_TESTS_SOURCES "${PROJECT_SOURCE_DIR}/tests/engine_tests/*.cpp")
-SET(ENGINE_TESTS_SOURCES
- ${ENGINE_TESTS_SOURCES}
- ${PROJECT_SOURCE_DIR}/src/domain/widget_version.cpp)
-PKG_CHECK_MODULES(ENGINE_TESTS_PKGS
- eina
- evas
- ecore
- elementary
- appcore-efl
- efreet
- efreet-mime
- efreet-trash
- ecore-x
- ecore-imf
- ecore-ipc
- ecore-evas
- cert-svc
- dpl-efl
- dpl-test-efl
- REQUIRED
- )
-
-INCLUDE_DIRECTORIES(
- ${ENGINE_TESTS_PKGS_INCLUDE_DIRS}
- ${PROJECT_SOURCE_DIR}/src/common
- ${PROJECT_SOURCE_DIR}/src/domain
- ${CMAKE_CURRENT_SOURCE_DIR}
- )
-
-LINK_DIRECTORIES(${ENGINE_TESTS_PKGS_LIBRARY_DIRS})
-
-ADD_EXECUTABLE(${TARGET_ENGINE_TEST}
- ${ENGINE_TESTS_SOURCES}
- )
-
-TARGET_LINK_LIBRARIES(${TARGET_ENGINE_TEST}
- ${ENGINE_TESTS_PKGS_LIBRARIES}
- )
-WRT_TEST_INSTALL(${TARGET_ENGINE_TEST})
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file TestCases.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief Implementation file for test cases for engine internal tests
- */
-#include <dpl/test/test_runner.h>
-#include <widget_version.h>
-#include <string>
-
-
-RUNNER_TEST(WidgetVersion_M2_O0)
-{
- DPL::String raw(L"1.2");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == true);
- RUNNER_ASSERT(version.Major() == DPL::String(L"1"));
- RUNNER_ASSERT(version.Minor() == DPL::String(L"2"));
- RUNNER_ASSERT(version.Micro() == DPL::Optional<DPL::String>());
- RUNNER_ASSERT(version.Optional() == DPL::Optional<DPL::String>());
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M2_O0_nonwac_1)
-{
- DPL::String raw(L"a1.2");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M2_O0_nonwac_2)
-{
- DPL::String raw(L"1.2a");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M2_O0_nonwac_3)
-{
- DPL::String raw(L"aaa1.2bbb");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M2_O0_nonwac_4)
-{
- DPL::String raw(L"1a.a2");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M2_O0_long)
-{
- DPL::String raw(L"123456789012345678901234567890.98765432109876543210987654321");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == true);
- RUNNER_ASSERT(version.Major() == DPL::String(L"123456789012345678901234567890"));
- RUNNER_ASSERT(version.Minor() == DPL::String(L"98765432109876543210987654321"));
- RUNNER_ASSERT(version.Micro() == DPL::Optional<DPL::String>());
- RUNNER_ASSERT(version.Optional() == DPL::Optional<DPL::String>());
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M3_O0)
-{
- DPL::String raw(L"1.2.3");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == true);
- RUNNER_ASSERT(version.Major() == DPL::String(L"1"));
- RUNNER_ASSERT(version.Minor() == DPL::String(L"2"));
- RUNNER_ASSERT(version.Micro() == DPL::Optional<DPL::String>(L"3"));
- RUNNER_ASSERT(version.Optional() == DPL::Optional<DPL::String>());
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M3_O0_nonwac_1)
-{
- DPL::String raw(L"a1a.2.3");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M3_O0_nonwac_2)
-{
- DPL::String raw(L"1.b2.3");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M3_O0_nonwac_3)
-{
- DPL::String raw(L"1.2.3c");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M3_O0_nonwac_4)
-{
- DPL::String raw(L"1.2.3a");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M3_O1_1)
-{
- DPL::String raw(L"1.2.3 test111");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == true);
- RUNNER_ASSERT(version.Major() == DPL::String(L"1"));
- RUNNER_ASSERT(version.Minor() == DPL::String(L"2"));
- RUNNER_ASSERT(version.Micro() == DPL::Optional<DPL::String>(L"3"));
- RUNNER_ASSERT(version.Optional() == DPL::Optional<DPL::String>(L"test111"));
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M3_O1_2)
-{
- DPL::String raw(L"1.2.3 111");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == true);
- RUNNER_ASSERT(version.Major() == DPL::String(L"1"));
- RUNNER_ASSERT(version.Minor() == DPL::String(L"2"));
- RUNNER_ASSERT(version.Micro() == DPL::Optional<DPL::String>(L"3"));
- RUNNER_ASSERT(version.Optional() == DPL::Optional<DPL::String>(L"111"));
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M3_O1_3)
-{
- DPL::String raw(L"1.2.3 ");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_M2_O1_1)
-{
- DPL::String raw(L"1.2 t");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == true);
- RUNNER_ASSERT(version.Major() == DPL::String(L"1"));
- RUNNER_ASSERT(version.Minor() == DPL::String(L"2"));
- RUNNER_ASSERT(version.Micro() == DPL::Optional<DPL::String>());
- RUNNER_ASSERT(version.Optional() == DPL::Optional<DPL::String>(L"t"));
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_Strange_0)
-{
- DPL::String raw(L"1");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_Strange_1)
-{
- DPL::String raw(L".1");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_Strange_2)
-{
- DPL::String raw(L"..1");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_Strange_3)
-{
- DPL::String raw(L"...1");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_Strange_4)
-{
- DPL::String raw(L"qwerty");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_Strange_5)
-{
- DPL::String raw(L"!@#$%^&*()_+ ^&%^*&%$^*&%*()& JHKJLHKJLH 685685687");
- WidgetVersion version(raw);
-
- RUNNER_ASSERT(version.IsWac() == false);
- RUNNER_ASSERT(version.Raw() == raw);
-}
-
-RUNNER_TEST(WidgetVersion_Compare_0)
-{
- RUNNER_ASSERT(WidgetVersion(L"1.1") < WidgetVersion(L"1.2"));
-}
-
-RUNNER_TEST(WidgetVersion_Compare_1)
-{
- RUNNER_ASSERT(WidgetVersion(L"01.001") < WidgetVersion(L"0001.002"));
-}
-
-RUNNER_TEST(WidgetVersion_Compare_2)
-{
- RUNNER_ASSERT(WidgetVersion(L"0.1") == WidgetVersion(L"00.1"));
-}
-
-RUNNER_TEST(WidgetVersion_Compare_3)
-{
- RUNNER_ASSERT(WidgetVersion(L"1.00000000000000") >= WidgetVersion(L"1.0 test"));
-}
-
-RUNNER_TEST(WidgetVersion_Compare_4)
-{
- RUNNER_ASSERT(WidgetVersion(L"19647963733338932479072098437089778943732432.00000000000000004324324324324321") > WidgetVersion(L"4324324324324324324321.000432"));
-}
-
-RUNNER_TEST(WidgetVersion_Compare_5)
-{
- RUNNER_ASSERT(WidgetVersion(L"12345.1") == WidgetVersion(L"12345.1"));
-}
-
-RUNNER_TEST(WidgetVersion_Compare_6)
-{
- RUNNER_ASSERT(WidgetVersion(L"1.1") != WidgetVersion(L"1.11"));
-}
-
-RUNNER_TEST(WidgetVersion_Compare_7)
-{
- RUNNER_ASSERT(WidgetVersion(L"000123000.0 notatest") == WidgetVersion(L"00123000.0 testtesttest"));
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file main.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of main
- */
-#include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
-
-
-int main(int argc, char *argv[])
-{
- LogInfo("Starting tests");
- int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
-
- return status;
-}
-
+++ /dev/null
-#
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Bartlomiej Grzelewski (b.grzelewski@samsung.com)
-# @version 1.0
-# @brief
-#
-
-SET(TARGET_SMACK_TEST "wrt-tests-smack")
-
-# Set DPL tests sources
-SET(SMACK_TESTS_SOURCES
- ${PROJECT_SOURCE_DIR}/tests/smack_tests/smack_tests.cpp
- ${PROJECT_SOURCE_DIR}/tests/smack_tests/TestSuite01.cpp
- ${PROJECT_SOURCE_DIR}/tests/w3c_tests/W3CTestBase.cpp
- )
-
-WRT_TEST_BUILD(${TARGET_SMACK_TEST} ${SMACK_TESTS_SOURCES})
-
-WRT_TEST_INSTALL(${TARGET_SMACK_TEST})
-
-
-ADD_SUBDIRECTORY("test-cases")
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file TestSuite01.cpp
- * @author Bartlomiej Grzelewski <b.grzelewski@samsung.com>
- * @brief Test cases for smack.
- */
-#include <string>
-#include <vector>
-
-#include <dpl/log/log.h>
-#include <dpl/string.h>
-#include <dpl/test/test_runner.h>
-
-#include <AceDAO.h>
-#include <AceUpdateEventMessages.h>
-#include <Preference.h>
-#include <loop_control.h>
-
-#include "test_tools.h"
-
-#define SMACK_TEST_FILE "/opt/media/Downloads/Others/TEST"
-#define SMACK_TEST_POLICY "/usr/etc/ace/smack-test.xml"
-#define SMACK_TEST_WIDGET01 "/opt/apps/widget/user/smack/smack01.wgt"
-#define SMACK_TEST_WIDGET01_NAME "test01"
-#define SMACK_TEST_WIDGET02 "/opt/apps/widget/user/smack/smack02.wgt"
-#define SMACK_TEST_WIDGET02_NAME "test02"
-
-#define CLEANENV(d) \
- do{ \
- PolicyChanger changer; \
- changer.updatePolicy(d); \
- AceDB::AceDAO::clearWidgetDevCapSettings(); \
- AceDB::AceDAO::clearDevCapSettings(); \
- }while(0)
-
-#define TESTSUITE01(n) \
-RUNNER_TEST(ts01_smack_ ## n)
-
-TESTSUITE01(00_check_compilation_flags){
-#ifdef WRT_SKIP_ACE_SUPPORT
- RUNNER_ASSERT(true);
-#else
- RUNNER_ASSERT(false);
-#endif
-}
-
-TESTSUITE01(01){
- CLEANENV(SMACK_TEST_POLICY);
-
- FileWrapper file(SMACK_TEST_FILE);
- file.create();
-
- ShellWrapper wrapper(SMACK_TEST_WIDGET01, SMACK_TEST_WIDGET01_NAME);
-
- wrapper.install();
- wrapper.run();
-
- std::vector<char> data = {'1'};
- RUNNER_ASSERT(file.expectContent(data));
-}
-
-TESTSUITE01(02){
- CLEANENV(SMACK_TEST_POLICY);
-
- FileWrapper file(SMACK_TEST_FILE);
- file.create();
-
- ShellWrapper wrapper(SMACK_TEST_WIDGET02, SMACK_TEST_WIDGET02_NAME);
-
- wrapper.install();
- wrapper.setEnvironment("WRT_SKIP_ACE=1");
- wrapper.run();
-
- RUNNER_ASSERT(file.empty());
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file smack_tests.cpp
- * @author Bartlomiej Grzelewski <b.grzelewski@samsung.com>
- * @brief This file is the implementation file of main
- */
-#include <string>
-
-#include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
-
-#include <localization_utils.h>
-#include <loop_control.h>
-#include <wrt_api.h>
-
-#include <AceDAO.h>
-
-using namespace LoopControl;
-
-void init_cb (WrtErrStatus status, void* data)
-{
- (void) status;
- (void) data;
- LogInfo("Init Succesfull");
- finish_wait_for_wrt_init();
-}
-
-int main (int argc, char *argv[])
-{
- init_loop(argc, argv);
- LogInfo("Initializing WRT");
- wrt_init(NULL, &init_cb);
-
- wait_for_wrt_init();
- LogInfo("Starting tests");
-
- LanguageTagsList list;
- list.push_back(L"en_US");
- LocalizationUtils::SetSystemLanguageTags(list);
-
- int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
-
- wrt_shutdown();
- quit_loop();
- return status;
-}
-
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/smack_tests/test-cases/smack-test.xml
- DESTINATION /usr/etc/ace
- PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE
- )
-
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/smack_tests/test-cases/smack-test.xml
- ${PROJECT_SOURCE_DIR}/tests/smack_tests/test-cases/smack01.wgt
- ${PROJECT_SOURCE_DIR}/tests/smack_tests/test-cases/smack02.wgt
- DESTINATION /opt/apps/widget/user/smack
- PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ GROUP_WRITE
- )
-
+++ /dev/null
-<policy-set combine="first-matching-target">
- <policy combine="first-applicable">
- <target>
- <subject>
- <subject-match attr="id" match="test01" />
- </subject>
- </target>
- <rule effect="permit">
- <condition>
- <resource-match attr="device-cap">
- filesystem
- </resource-match>
- </condition>
- </rule>
- <rule effect="deny" />
- </policy>
- <policy combine="first-applicable">
- <target>
- <subject>
- <subject-match attr="id" match="test02" />
- </subject>
- </target>
- <rule effect="deny">
- <condition>
- <resource-match attr="device-cap">
- filesystem
- </resource-match>
- <resource-match attr="param:location" match="*TEST" />
- </condition>
- </rule>
- <rule effect="permit">
- <condition>
- <resource-match attr="device-cap">
- filesystem
- </resource-match>
- </condition>
- </rule>
- <rule effect="deny" />
- </policy>
-</policy-set>
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file test_tools.cpp
- * @author Bartlomiej Grzelewski <b.grzelewski@samsung.com>
- * @brief Test tools.
- */
-
-#include <cstdlib>
-#include <cstdio>
-#include <sys/types.h>
-#include <sys/stat.h>
-#include <fcntl.h>
-
-#include <fstream>
-#include <string>
-#include <vector>
-
-#include <dpl/event/event_delivery.h>
-#include <dpl/log/log.h>
-#include <dpl/string.h>
-
-#include <wrt_api.h>
-
-
-namespace { // anonymous
-// we cannot uninstall widget by his name
-//
-// this functions and dependency from wrt_api should be removed as soon as
-// wrt-installer supports uninstall by name
-
-template<typename Predicate>
-DPL::OptionalInt findWidgetHandleForPredicate(const Predicate &predicate)
-{
- int count;
- int *handles;
-
- if (wrt_has_succeded(wrt_get_widget_list(&count, &handles))) {
- for (int i = 0; i < count; ++i) {
- wrt_widget_info *info;
-
- // Get widget infor for handle
- if (wrt_has_succeded(wrt_get_widget_info(handles[i], &info))) {
- if (predicate(info)) {
- // Free widget name
- wrt_free_widget_info(info);
-
- // Done
- return DPL::OptionalInt(handles[i]);
- }
-
- // Free widget info
- wrt_free_widget_info(info);
- } else {
- LogWarning("ReturnStatus::Faileded to get widget name");
- }
- }
-
- // Free list
- wrt_free_widget_list(handles);
- } else {
- LogWarning("ReturnStatus::Faileded to get widget handle list");
- }
-
- return DPL::OptionalInt::Null;
-}
-
-struct WidgetNamePredicate
-{
- private:
- std::string m_name;
-
- public:
- WidgetNamePredicate(const std::string &name) : m_name(name) {}
-
- bool operator()(wrt_widget_info *info) const
- {
- return info->name && m_name == info->name;
- }
-};
-
-DPL::OptionalInt findWidgetHandleForName(const std::string &widgetName)
-{
- return findWidgetHandleForPredicate(WidgetNamePredicate(widgetName));
-}
-} // anonymous namespace
-
-class PolicyChanger : public DPL::Event::EventListener<AceUpdateResponseEvent>
-{
- public:
- PolicyChanger()
- {
- DPL::Event::EventDeliverySystem::AddListener<AceUpdateResponseEvent>(this);
- }
-
- ~PolicyChanger()
- {
- DPL::Event::EventDeliverySystem::RemoveListener<
- AceUpdateResponseEvent>(this);
- }
-
- void OnEventReceived(const AceUpdateResponseEvent& event)
- {
- if (0 != event.GetArg0()) {
- LogError("Policy change failed");
- }
- Assert(0 == event.GetArg0() && "Policy change failed");
- LoopControl::finish_wait_for_wrt_init();
- }
-
- void updatePolicy(const std::string& path)
- {
- AceUpdateRequestEvent event(path);
- DPL::Event::EventDeliverySystem::Publish(event);
- LoopControl::wait_for_wrt_init();
- }
-};
-
-
-class ShellWrapper {
-public:
- ShellWrapper(const std::string &path, const std::string &name)
- : m_installed(false)
- , m_widgetPath(path)
- , m_widgetName(name)
- {}
-
- int install() {
- std::string temp = "wrt-installer -i ";
- temp += m_widgetPath;
- LogDebug("Command: " << temp);
- int command = system(temp.c_str());
- LogDebug("Command result: " << command);
- m_installed = (command != -1);
- return command;
- }
-
- void setEnvironment(const std::string &env) {
- m_env = env;
- }
-
- int run() {
- std::string temp;
- temp += m_env;
- temp += " wrt-client -ln ";
- temp += m_widgetName;
-
- LogDebug("Command: " << temp);
- int command = system(temp.c_str());
- LogDebug("Command result: " << command);
- return command;
- }
-
- ~ShellWrapper() {
- if (!m_installed) {
- LogDebug("Widget was not installed!");
- return;
- }
- // we are directly reading from database :/
- DPL::OptionalInt handle = findWidgetHandleForName(m_widgetName);
- if (!handle) {
- LogError("Widget \"" << m_widgetName << "\" not found.");
- return;
- }
- std::stringstream temp;
- temp << "wrt-installer -u ";
- temp << *handle;
- LogDebug("Command:" << temp.str());
- int command = system(temp.str().c_str());
- LogDebug("Command result: " << command);
- }
-
-private:
- bool m_installed;
- std::string m_widgetPath;
- std::string m_widgetName;
- std::string m_env;
-};
-
-class FileWrapper {
-public:
- FileWrapper(const std::string &path)
- : m_filePath(path)
- , m_created(false)
- {}
-
- bool create() {
- int result = open(m_filePath.c_str(), O_TRUNC | O_CREAT | O_RDWR);
- if (result != -1) {
- m_created = true;
- close(result);
- }
- return result != -1;
- }
-
- bool expectContent(const std::vector<char> &buff){
- std::fstream file;
- file.open(m_filePath, std::ios::in | std::ios::out | std::ios::binary);
- if (!file.good()) {
- file.close();
- LogError("Error opening file: " << m_filePath);
- return false;
- }
- file.seekg(0, std::ios::end);
- size_t length = file.tellg();
- file.seekg(0, std::ios::beg);
-
- if (length != buff.size()) {
- file.close();
- LogError("Wrong size!");
- return false;
- }
-
- std::vector<char> data;
- data.resize(length);
-
- file.read(&data[0], length);
- file.close();
-
- std::string one(&buff[0], length);
- std::string two(&data[0], length);
-
- if (data == buff)
- return true;
-
- return false;
- }
-
- bool empty() {
- std::fstream file;
- file.open(m_filePath, std::ios::in | std::ios::out);
- if (!file.good()) {
- file.close();
- LogError("Error opening file: " << m_filePath);
- return false;
- }
- file.seekg(0, std::ios::end);
- size_t length = file.tellg();
- file.close();
- LogDebug("File size: " << length);
- return length == 0;
- }
-
- ~FileWrapper() {
- if (!m_created) {
- return;
- }
- if (0 != remove(m_filePath.c_str())) {
- LogDebug("Error removing file");
- } else {
- LogDebug("File removed.");
- }
- }
-
-private:
- std::string m_filePath;
- bool m_created;
-};
-
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Lukasz Wrzosek (l.wrzosek@samsung.com)
-# @version 1.0
-#
-
-SET(TESTS_COMMON_LIB_INCLUDES
- ${PROJECT_SOURCE_DIR}/src/common
- )
-
-ADD_SUBDIRECTORY(efl)
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Lukasz Wrzosek (l.wrzosek@samsung.com)
-# @version 1.0
-#
-
-PKG_CHECK_MODULES(COMMON_LIB_PKGS
- libxml-2.0
- openssl
- dbus-1
- libpcrecpp
- dpl-efl
- glib-2.0
- gthread-2.0
- ewebkit
- edje
- ecore
- ecore-x
- ecore-imf
- ecore-ipc
- ecore-evas
- ecore-file
- ecore-input
- evas
- eina
- elementary
- elm-webview
- vconf
- cert-svc
- libsoup-2.4
- ui-gadget
- aul
- libidn
- xmlsec1
- secure-storage
- libiri
- dpl-utils-efl
- REQUIRED
- )
-
-INCLUDE_DIRECTORIES(
- ${TESTS_COMMON_LIB_INCLUDES}
- ${COMMON_LIB_PKGS_INCLUDE_DIRS}
- )
-LINK_DIRECTORIES(${COMMON_LIB_PKGS_LIBRARY_DIRS})
-
-# Build shared library
-ADD_LIBRARY(${TARGET_TESTS_COMMON_LIB} SHARED ${TESTS_COMMON_LIB_SRC})
-
-SET_TARGET_PROPERTIES(${TARGET_TESTS_COMMON_LIB} PROPERTIES
- SOVERSION ${PROJECT_VERSION})
-
-TARGET_LINK_LIBRARIES(${TARGET_TESTS_COMMON_LIB}
- ${TARGET_ACE_DAO_RW_LIB}
- ${TARGET_WRT_DAO_RW_LIB}
- -Wl,-whole-archive ${TARGET_WRT_ENGINE_STATIC} -Wl,-no-whole-archive
- )
-
-TARGET_LINK_LIBRARIES(${TARGET_TESTS_COMMON_LIB}
- LINK_INTERFACE_LIBRARIES ${COMMON_LIB_PKGS_LIBRARIES}
- ${TARGET_VCORE_LIB}
- )
-
-
-# Target library properties
-SET_TARGET_PROPERTIES(${TARGET_TESTS_COMMON_LIB} PROPERTIES
- LINK_FLAGS "--export-dynamic -Wl,--hash-style=both -Wl,--version-script=${PROJECT_SOURCE_DIR}/wrt-engine-test.map")
-
-# Install libraries
-INSTALL(TARGETS ${TARGET_TESTS_COMMON_LIB}
- DESTINATION lib
- PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE
- GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE)
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
-# @author Pawel Sikorski (p.sikorski@samsung.com)
-# @author Bartlomiej Grzelewski (b.grzelewski@samsung.com)
-# @version 1.0
-# @brief
-#
-SET(TARGET_SIG_TEST "wrt-tests-vcore")
-
-# Set DPL tests sources
-SET(SIG_TESTS_SOURCES
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/vcore_tests.cpp
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/TestCases.cpp
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/TestEnv.cpp
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/TestBase.cpp
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/TestCRL.cpp
- ${PROJECT_SOURCE_DIR}/tests/w3c_tests/W3CTestBase.cpp
- )
-
-WRT_TEST_BUILD(${TARGET_SIG_TEST} ${SIG_TESTS_SOURCES})
-
-ADD_CUSTOM_COMMAND(TARGET ${TARGET_SIG_TEST} POST_BUILD
- COMMAND ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/create_certs.sh
- WORKING_DIRECTORY ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/
- COMMENT "Generate certificate chains"
- )
-
-WRT_TEST_INSTALL(${TARGET_SIG_TEST})
-
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widget/author-signature.xml
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widget/signature1.xml
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widget/signature22.xml
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widget/config.xml
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widget/index.html
- DESTINATION
- /opt/apps/widget/tests/vcore_widget_uncompressed
- )
-
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widgets/blankWidget.wgt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widgets/fingerprint_test.wgt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widgets/access_info.wgt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widgets/recognized.wgt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widgets/recognized1.wgt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widgets/unrecognized.wgt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widgets/save_cert.wgt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/widgets/not_allowed.wgt
- DESTINATION
- /opt/apps/widget/tests/vcore_widgets
- )
-
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/keys/ocsp_level0deprecated.crt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/keys/ocsp_level1.crt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/keys/ocsp_level2.crt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/keys/ocsp_rootca.crt
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/keys/operator.root.cert.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/keys/root_cacert.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/test-cases/keys/CAbundle.crt
- DESTINATION
- /opt/apps/widget/tests/vcore_keys
- )
-
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/demoCA/cacert.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/1second_level.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/1third_level.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/2second_level.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/2third_level.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/3second_level.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/3third_level.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/cacrl1.pem
- ${PROJECT_SOURCE_DIR}/tests/vcore_tests/certificate-generator/cacrl2.pem
- DESTINATION
- /opt/apps/widget/tests/vcore_certs/
-)
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "TestBase.h"
-
-#include <algorithm>
-#include <list>
-
-#include <dpl/log/log.h>
-#include <dpl/foreach.h>
-#include <dpl/optional.h>
-#include <dpl/test/test_runner.h>
-#include <dpl/string.h>
-
-#include <loop_control.h>
-#include <security_controller.h>
-
-#include <widget_model.h>
-#include <vcore/CertificateCollection.h>
-
-using namespace LoopControl;
-
-void *SigTestBase::m_win = 0;
-
-void SigTestBase::startWidgetCallback(void *,
- int /* widget_handler */,
- WrtErrStatus status,
- const char* /* errorMsg */,
- void* data) {
- LogDebug("Run status callback. Status: " << status);
- wrt_end_loop();
- Assert(data);
- SigTestBase* self = static_cast<SigTestBase*>(data);
- self->m_status = status;
-}
-
-void SigTestBase::stopWidgetCallback(int /* widget_handler */,
- WrtErrStatus /* status */,
- void * /* data */)
-{
- LogDebug("Stop widget callback");
- wrt_end_loop();
-}
-
-void SigTestBase::runWidget()
-{
- if (!m_win) { m_win = abstract_window(); }
-
- wrt_launch_widget(widgetHandle, m_win, NULL, this, startWidgetCallback);
- wrt_start_loop();
-}
-
-void SigTestBase::stopWidget()
-{
- wrt_kill_widget(widgetHandle, this, stopWidgetCallback);
- wrt_start_loop();
-}
-
-bool SigTestBase::isFingerprint(const std::string &fingerprint,
- WrtDB::WidgetCertificateData::Owner owner,
- WrtDB::WidgetCertificateData::Type type) const
-{
- std::list<std::string> flist = dao->getKeyFingerprints(owner, type);
-
- FOREACH(it, flist) {
- LogError("Matching " << *it << " with " << fingerprint);
- if (*it == fingerprint) {
- return true;
- }
- }
- return false;
-}
-
-bool SigTestBase::isCommonName(const std::string &commonName,
- WrtDB::WidgetCertificateData::Owner owner,
- WrtDB::WidgetCertificateData::Type type) const
-{
- std::list<std::string> cnlist = dao->getKeyCommonNameList(owner, type);
-
- FOREACH(it, cnlist){
- if (*it == commonName) {
- return true;
- }
- }
- return false;
-}
-
-void SigTestBase::checkIsRecognized(bool expectedResult) const
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(expectedResult == dao->isRecognized(),
- "Recognized status doesn't match one in db");
- LogInfo("Recognized status matches one in db");
-}
-
-void SigTestBase::checkIsDistributorSigned(bool expectedResult) const
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(expectedResult == dao->isDistributorSigned(),
- "Trusted status doesn't match one in db");
- LogInfo("Trusted status matches one in db");
-}
-
-void SigTestBase::checkInvalidCertificate() const
-{
- RUNNER_ASSERT_MSG(
- Jobs::WidgetInstall::Exceptions::ErrorInvalidPackage == error,
- "Install status returned: " << MsgFromError(error));
-}
-
-
-void SigTestBase::checkPairCertificateCommonName(const std::string &son,
- const std::string &parent)
-const
-{
- using namespace ValidationCore;
- DPL::Optional<DPL::String> optSon = DPL::FromUTF8String(son);
- DPL::Optional<DPL::String> optParent = DPL::FromUTF8String(parent);
-
- RUNNER_ASSERT(dao);
- CertificateCollectionList list = model->OCSPCertificateChainList.Get();
- RUNNER_ASSERT_MSG(!list.empty(), "Wrong list size");
- CertificateCollection chain = list.front();
-
- LogError("Size: " << chain.size());
-
- CertificateList::const_iterator it = chain.begin();
-
- RUNNER_ASSERT_MSG(optSon == (*it)->getCommonName(), "CommonName mismatch");
- ++it;
- RUNNER_ASSERT_MSG(optParent == (*it)->getCommonName(),
- "CommonName mismatch");
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef _TEST_BASE_H
-#define _TEST_BASE_H
-#include <string>
-
-#include <dpl/test/test_runner.h>
-
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <installer_controller.h>
-#include <widget_install/widget_install_errors.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-
-#include "wrt_api.h"
-
-#include "../w3c_tests/W3CTestBase.h"
-
-class SigTestBase : public W3CTestBase
-{
- private:
- static void startWidgetCallback(void *This,
- WidgetHandle widgetHandle,
- WrtErrStatus status,
- const char *errorMsg,
- void *data);
- static void stopWidgetCallback(int widgetHandle,
- WrtErrStatus status,
- void *data);
- WrtErrStatus m_status;
-
- protected:
- static void *m_win;
-
- public:
- SigTestBase (const std::string path) :
- W3CTestBase(std::string("")), m_status(WRT_SUCCESS)
- {
- widgetPath = path;
- }
-
- void runWidget();
- void stopWidget();
-
- std::string getSession() const;
-
- bool isFingerprint(const std::string &fingerprint,
- WrtDB::WidgetCertificateData::Owner owner,
- WrtDB::WidgetCertificateData::Type type) const;
-
- bool isCommonName(const std::string &commonName,
- WrtDB::WidgetCertificateData::Owner owner,
- WrtDB::WidgetCertificateData::Type type) const;
-
- void checkIsRecognized(bool expectedResult) const;
- void checkIsDistributorSigned(bool expectedResult) const;
- void checkInvalidCertificate() const;
- void checkPairCertificateCommonName(const std::string &son,
- const std::string &parent) const;
-
- WrtErrStatus getStatus() const { return m_status; }
-};
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <string>
-
-#include <dpl/test/test_runner.h>
-#include <dpl/event/event_delivery.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <vcore/ReferenceValidator.h>
-#include <vcore/SignatureFinder.h>
-#include <vcore/SignatureReader.h>
-#include <vcore/SignatureValidator.h>
-#include <vcore/OCSP.h>
-#include <vcore/CachedOCSP.h>
-#include "TestEnv.h"
-#include <vcore/SSLContainers.h>
-#include "TestBase.h"
-#include <vcore/Base64.h>
-#include <vcore/CertificateLoader.h>
-#include <vcore/CRL.h>
-#include <vcore/CachedCRL.h>
-#include <vcore/RevocationCheckerBase.h>
-#include "TestCRL.h"
-#include "../detail/include/loop_control.h"
-#include "../../src/access-control/engine/AceUpdateEventMessages.h"
-#include <vcore/CertificateCacheDAO.h>
-
-using namespace WrtDB;
-
-#define CHECK_FINGERPRINT(widget,finger,owner,type) \
- RUNNER_ASSERT(true == \
- (widget).isFingerprint((finger),(owner),(type)));
-
-#define CHECK_FINGERPRINT_FAIL(widget,finger,owner,type) \
- RUNNER_ASSERT(false == \
- (widget).isFingerprint((finger),(owner),(type)));
-
-#define CHECK_COMMONNAME(widget,finger,owner,type) \
- RUNNER_ASSERT(true == \
- (widget).isCommonName((finger),(owner),(type)));
-
-namespace {
-
-const std::string widget_path =
- "/opt/apps/widget/tests/vcore_widget_uncompressed/";
-const std::string keys_path = "/opt/apps/widget/tests/vcore_keys/";
-const std::string widget_store_path = "/opt/apps/widget/tests/vcore_widgets/";
-const std::string cert_store_path = "/opt/apps/widget/tests/vcore_certs/";
-const std::string crl_URI = "http://localhost/my.crl";
-
-const std::string anka_ec_key_type = "urn:oid:1.2.840.10045.3.1.7";
-const std::string anka_ec_public_key =
- "BGi9RmTUjpqCpQjx6SSiKdfmtjQBFNSN7ghm6TuaH9r4x73WddeLxLioH3VEmFLC+QLiR"\
- "kPxDxL/6YmQdgfGrqk=";
-
-const std::string rsa_modulus =
- "ocwjKEFaPxLNcPTz2PtT2Gyu5jzkWaPo4thjZo3rXuNbD4TzjY02UGnTxvflNeORLpSS1"\
- "PeYr/1E/Nhr7qQAzj9g0DwW7p8zQEdOUi3v76VykeB0pFJH+0Fxp6LVBX9Z+EvZk+dbOy"\
- "GJ4Njm9B6M09axXlV11Anj9B/HYUDfDX8=";
-const std::string rsa_exponent = "AQAB";
-
-const std::string magda_dsa_p =
- "2BYIQj0ePUVxzrdBT41eCblraa9Dqag7QXFMCRM2PtyS22JPDKuV77tBc/jg0V3htHWdR"\
- "q9n6/kQDwrP7FIPoLATLIiC3oAYWj46Mr6d9k/tt/JZU6PvULmB2k1wrrmvKUi+U+I5Ro"\
- "qe8ui8lqR9pp9u2WCh2QmFfCohKNjN5qs=";
-const std::string magda_dsa_q = "4p4JcDqz+S7CbWyd8txApZw0sik=";
-const std::string magda_dsa_g =
- "AQrLND1ZGFvzwBpPPXplmPh1ijPx1O2gQEvPvyjR88guWcGqQc0m7dTb6PEvbI/oZ0o91"\
- "k7VEkfthURnNR1WtOLT8dmAuKQfwTQLPwCwUM/QiuWSlCyKLTE4Ev8aOG7ZqWudsKm/td"\
- "n9pUNGtcod1wo1ZtP7PfEJ6rYZGQDOlz8=";
-
-const std::string googleCA =
-"MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG"
-"A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz"
-"cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2"
-"MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV"
-"BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt"
-"YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN"
-"ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE"
-"BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is"
-"I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G"
-"CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do"
-"lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc"
-"AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k";
-
-const std::string google2nd =
-"MIIDIzCCAoygAwIBAgIEMAAAAjANBgkqhkiG9w0BAQUFADBfMQswCQYDVQQGEwJV"
-"UzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xNzA1BgNVBAsTLkNsYXNzIDMgUHVi"
-"bGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQwNTEzMDAw"
-"MDAwWhcNMTQwNTEyMjM1OTU5WjBMMQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhh"
-"d3RlIENvbnN1bHRpbmcgKFB0eSkgTHRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBD"
-"QTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1NNn0I0Vf67NMf59HZGhPwtx"
-"PKzMyGT7Y/wySweUvW+Aui/hBJPAM/wJMyPpC3QrccQDxtLN4i/1CWPN/0ilAL/g"
-"5/OIty0y3pg25gqtAHvEZEo7hHUD8nCSfQ5i9SGraTaEMXWQ+L/HbIgbBpV8yeWo"
-"3nWhLHpo39XKHIdYYBkCAwEAAaOB/jCB+zASBgNVHRMBAf8ECDAGAQH/AgEAMAsG"
-"A1UdDwQEAwIBBjARBglghkgBhvhCAQEEBAMCAQYwKAYDVR0RBCEwH6QdMBsxGTAX"
-"BgNVBAMTEFByaXZhdGVMYWJlbDMtMTUwMQYDVR0fBCowKDAmoCSgIoYgaHR0cDov"
-"L2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwMgYIKwYBBQUHAQEEJjAkMCIGCCsG"
-"AQUFBzABhhZodHRwOi8vb2NzcC50aGF3dGUuY29tMDQGA1UdJQQtMCsGCCsGAQUF"
-"BwMBBggrBgEFBQcDAgYJYIZIAYb4QgQBBgpghkgBhvhFAQgBMA0GCSqGSIb3DQEB"
-"BQUAA4GBAFWsY+reod3SkF+fC852vhNRj5PZBSvIG3dLrWlQoe7e3P3bB+noOZTc"
-"q3J5Lwa/q4FwxKjt6lM07e8eU9kGx1Yr0Vz00YqOtCuxN5BICEIlxT6Ky3/rbwTR"
-"bcV0oveifHtgPHfNDs5IAn8BL7abN+AqKjbc1YXWrOU/VG+WHgWv";
-
-const std::string google3rd =
-"MIIDITCCAoqgAwIBAgIQL9+89q6RUm0PmqPfQDQ+mjANBgkqhkiG9w0BAQUFADBM"
-"MQswCQYDVQQGEwJaQTElMCMGA1UEChMcVGhhd3RlIENvbnN1bHRpbmcgKFB0eSkg"
-"THRkLjEWMBQGA1UEAxMNVGhhd3RlIFNHQyBDQTAeFw0wOTEyMTgwMDAwMDBaFw0x"
-"MTEyMTgyMzU5NTlaMGgxCzAJBgNVBAYTAlVTMRMwEQYDVQQIEwpDYWxpZm9ybmlh"
-"MRYwFAYDVQQHFA1Nb3VudGFpbiBWaWV3MRMwEQYDVQQKFApHb29nbGUgSW5jMRcw"
-"FQYDVQQDFA53d3cuZ29vZ2xlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkC"
-"gYEA6PmGD5D6htffvXImttdEAoN4c9kCKO+IRTn7EOh8rqk41XXGOOsKFQebg+jN"
-"gtXj9xVoRaELGYW84u+E593y17iYwqG7tcFR39SDAqc9BkJb4SLD3muFXxzW2k6L"
-"05vuuWciKh0R73mkszeK9P4Y/bz5RiNQl/Os/CRGK1w7t0UCAwEAAaOB5zCB5DAM"
-"BgNVHRMBAf8EAjAAMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwudGhhd3Rl"
-"LmNvbS9UaGF3dGVTR0NDQS5jcmwwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUF"
-"BwMCBglghkgBhvhCBAEwcgYIKwYBBQUHAQEEZjBkMCIGCCsGAQUFBzABhhZodHRw"
-"Oi8vb2NzcC50aGF3dGUuY29tMD4GCCsGAQUFBzAChjJodHRwOi8vd3d3LnRoYXd0"
-"ZS5jb20vcmVwb3NpdG9yeS9UaGF3dGVfU0dDX0NBLmNydDANBgkqhkiG9w0BAQUF"
-"AAOBgQCfQ89bxFApsb/isJr/aiEdLRLDLE5a+RLizrmCUi3nHX4adpaQedEkUjh5"
-"u2ONgJd8IyAPkU0Wueru9G2Jysa9zCRo1kNbzipYvzwY4OA8Ys+WAi0oR1A04Se6"
-"z5nRUP8pJcA2NhUzUnC+MY+f6H/nEQyNv4SgQhqAibAxWEEHXw==";
-
-const std::string certVerisign =
-"MIIG+DCCBeCgAwIBAgIQU9K++SSnJF6DygHkbKokdzANBgkqhkiG9w0BAQUFADCB"
-"vjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL"
-"ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTswOQYDVQQLEzJUZXJtcyBvZiB1c2Ug"
-"YXQgaHR0cHM6Ly93d3cudmVyaXNpZ24uY29tL3JwYSAoYykwNjE4MDYGA1UEAxMv"
-"VmVyaVNpZ24gQ2xhc3MgMyBFeHRlbmRlZCBWYWxpZGF0aW9uIFNTTCBTR0MgQ0Ew"
-"HhcNMTAwNTI2MDAwMDAwWhcNMTIwNTI1MjM1OTU5WjCCASkxEzARBgsrBgEEAYI3"
-"PAIBAxMCVVMxGTAXBgsrBgEEAYI3PAIBAhMIRGVsYXdhcmUxGzAZBgNVBA8TElYx"
-"LjAsIENsYXVzZSA1LihiKTEQMA4GA1UEBRMHMjQ5Nzg4NjELMAkGA1UEBhMCVVMx"
-"DjAMBgNVBBEUBTk0MDQzMRMwEQYDVQQIEwpDYWxpZm9ybmlhMRYwFAYDVQQHFA1N"
-"b3VudGFpbiBWaWV3MSIwIAYDVQQJFBk0ODcgRWFzdCBNaWRkbGVmaWVsZCBSb2Fk"
-"MRcwFQYDVQQKFA5WZXJpU2lnbiwgSW5jLjEmMCQGA1UECxQdIFByb2R1Y3Rpb24g"
-"U2VjdXJpdHkgU2VydmljZXMxGTAXBgNVBAMUEHd3dy52ZXJpc2lnbi5jb20wggEi"
-"MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCj+PvvK+fZOXwno0yT/OTy2Zm9"
-"ehnZjTtO/X2IWBEa3jG30C52uHFQI4NmXiQVNvJHkBaAj0ilVjvGdxXmkyyFsugt"
-"IWOTZ8pSKdX1tmGFIon6Ko9+lBFkVkudA1ogAUbtTB8IcdeOlpK78T4SjdVMhY18"
-"150YzSw6hRKlw52wBaDxtGZElvOth41K7TUcaDnQVzz5SBPW5MUhi7AWrdoSk17O"
-"BozOzmB/jkYDVDnwLcbR89SLHEOle/idSYSDQUmab3y0JS8RyQV1+DB70mnFALnD"
-"fLiL47nMQQCGxXgp5voQ2YmSXhevKmEJ9vvtC6C7yv2W6yomfS/weUEce9pvAgMB"
-"AAGjggKCMIICfjCBiwYDVR0RBIGDMIGAghB3d3cudmVyaXNpZ24uY29tggx2ZXJp"
-"c2lnbi5jb22CEHd3dy52ZXJpc2lnbi5uZXSCDHZlcmlzaWduLm5ldIIRd3d3LnZl"
-"cmlzaWduLm1vYmmCDXZlcmlzaWduLm1vYmmCD3d3dy52ZXJpc2lnbi5ldYILdmVy"
-"aXNpZ24uZXUwCQYDVR0TBAIwADAdBgNVHQ4EFgQU8oBwK/WBXCZDWi0dbuDgPyTK"
-"iJIwCwYDVR0PBAQDAgWgMD4GA1UdHwQ3MDUwM6AxoC+GLWh0dHA6Ly9FVkludGwt"
-"Y3JsLnZlcmlzaWduLmNvbS9FVkludGwyMDA2LmNybDBEBgNVHSAEPTA7MDkGC2CG"
-"SAGG+EUBBxcGMCowKAYIKwYBBQUHAgEWHGh0dHBzOi8vd3d3LnZlcmlzaWduLmNv"
-"bS9ycGEwKAYDVR0lBCEwHwYIKwYBBQUHAwEGCCsGAQUFBwMCBglghkgBhvhCBAEw"
-"HwYDVR0jBBgwFoAUTkPIHXbvN1N6T/JYb5TzOOLVvd8wdgYIKwYBBQUHAQEEajBo"
-"MCsGCCsGAQUFBzABhh9odHRwOi8vRVZJbnRsLW9jc3AudmVyaXNpZ24uY29tMDkG"
-"CCsGAQUFBzAChi1odHRwOi8vRVZJbnRsLWFpYS52ZXJpc2lnbi5jb20vRVZJbnRs"
-"MjAwNi5jZXIwbgYIKwYBBQUHAQwEYjBgoV6gXDBaMFgwVhYJaW1hZ2UvZ2lmMCEw"
-"HzAHBgUrDgMCGgQUS2u5KJYGDLvQUjibKaxLB4shBRgwJhYkaHR0cDovL2xvZ28u"
-"dmVyaXNpZ24uY29tL3ZzbG9nbzEuZ2lmMA0GCSqGSIb3DQEBBQUAA4IBAQB9VZxB"
-"wDMRGyhFWYkY5rwUVGuDJiGeas2xRJC0G4+riQ7IN7pz2a2BhktmZ5HbxXL4ZEY4"
-"yMN68DEVErhtKiuL02ng27alhlngadKQzSL8pLdmQ+3jEwm9nva5C/7pbeqy+qGF"
-"is4IWNYOc4HKNkABxXm5v0ouys8HPNkTLFLep0gLqRXW3gYN2XbKUWMs7z7hJpkY"
-"GxP8YQSxi513O2dWVCXB8S6erIz9E/bcfdXoCPyQdn42y3IEoJvPvBS3S55fD4+Q"
-"Q43GPhumSg9a6S3hnyw8DX5OiUGmqgQrtSeDRsNmWqtWizEQbe+fotZpEn/7zYTa"
-"tk1ni/k5jDH/QeuG";
-
-const std::string crlExampleCertificate =
-"MIIFlDCCBHygAwIBAgIBADANBgkqhkiG9w0BAQUFADBDMRIwEAYKCZImiZPyLGQB"
-"GRYCZXMxGDAWBgoJkiaJk/IsZAEZFghpcmlzZ3JpZDETMBEGA1UEAxMKSVJJU0dy"
-"aWRDQTAeFw0wNTA2MjgwNTAyMjhaFw0xNTA2MjYwNTAyMjhaMEMxEjAQBgoJkiaJ"
-"k/IsZAEZFgJlczEYMBYGCgmSJomT8ixkARkWCGlyaXNncmlkMRMwEQYDVQQDEwpJ"
-"UklTR3JpZENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1CQiWlff"
-"ajoMSTuismKqLQ+Mt33Tq4bBpCZvCBXhqan1R0ksILPtK1L7C8QWqPk6AZZpuNmY"
-"cNVtJGc8ksgDWvX0EB3GKwZTZ8RrSRlSEe9Otq+Ur7S9uxM1JMmCr6zZTMFANzBS"
-"4btnduV78C09IhFYG4OW8IPhNrbfPaeOR+PRPAa/qdSONAwTrM1sZkIvGpAkBWM6"
-"Pn7TK9BAK6GLvwgii780fWj3Cwgmp8EDCTievBbWj+z8/apMEy9R0vyB2dWNNCnk"
-"6q8VvrjgMsJt33O3BqOoBuZ8R/SS9OFWLFSU3s7cfrRaUSJk/Mx8OGFizRkcXSzX"
-"0Nidcg7hX5i78wIDAQABo4ICkTCCAo0wDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4E"
-"FgQUnUJkLlupXvH/bMg8NtPxtkOYrRowawYDVR0jBGQwYoAUnUJkLlupXvH/bMg8"
-"NtPxtkOYrRqhR6RFMEMxEjAQBgoJkiaJk/IsZAEZFgJlczEYMBYGCgmSJomT8ixk"
-"ARkWCGlyaXNncmlkMRMwEQYDVQQDEwpJUklTR3JpZENBggEAMA4GA1UdDwEB/wQE"
-"AwIBxjARBglghkgBhvhCAQEEBAMCAAcwOwYJYIZIAYb4QgENBC4WLElSSVNHcmlk"
-"IENlcnRpZmljYXRpb24gQXV0aG9yaXR5IENlcnRpZmljYXRlMIGZBgNVHR8EgZEw"
-"gY4wLqAsoCqGKGh0dHA6Ly93d3cuaXJpc2dyaWQuZXMvcGtpL2NybC9jYWNybC5w"
-"ZW0wXKBaoFiGVmxkYXA6Ly9sZGFwLmlyaXNncmlkLmVzOjEzODAvY249SVJJU0dy"
-"aWRDQSxkYz1pcmlzZ3JpZCxkYz1lcz9jZXJ0aWZpY2F0ZVJldm9jYXRpb25MaXN0"
-"MDcGCWCGSAGG+EIBAwQqFihodHRwOi8vd3d3LmlyaXNncmlkLmVzL3BraS9jcmwv"
-"Y2FjcmwucGVtME4GCWCGSAGG+EIBCARBFj9odHRwOi8vd3d3LmlyaXNncmlkLmVz"
-"L3BraS9wb2xpY3kvMS4zLjYuMS40LjEuNzU0Ny4yLjIuNC4xLjEuMS8waQYDVR0g"
-"BGIwYDBeBg0rBgEEAbp7AgIEAQEBME0wSwYIKwYBBQUHAgEWP2h0dHA6Ly93d3cu"
-"aXJpc2dyaWQuZXMvcGtpL3BvbGljeS8xLjMuNi4xLjQuMS43NTQ3LjIuMi40LjEu"
-"MS4xLzANBgkqhkiG9w0BAQUFAAOCAQEAaqRfyLER+P2QOZLLdz66m7FGsgtFsAEx"
-"wiNrIChFWfyHVZG7Ph1fn/GDD5LMsrU23lx3NBN5/feHuut1XNYKNs8vtV07D70r"
-"DKjUlPbmWV0B+/GDxe1FDGop/tKQfyHSUaBuauXChFU/2INu5lhBerNl7QxNJ1ws"
-"cWGiT7R+L/2EjgzWgH1V/0zmIOMep6kY7MUs8rlyF0O5MNFs232cA1trl9kvhAGU"
-"9p58Enf5DWMrh17SPH586yIJeiWZtPez9G54ftY+XIqfn0X0zso0dnoXNJQYS043"
-"/5vSnoHdRx/EmN8yjeEavZtC48moN0iJ38eB44uKgCD77rZW5s1XqA==";
-
-class TestCleanup
-{
- public:
- explicit TestCleanup(bool bCheckForFakeVerification = false)
- {
- if (bCheckForFakeVerification) {
- bool bUnsetEnvVar = true;
-
- m_strEnvVar = "CHECK_ONLY_DOMAIN_INSTEAD_OF_VALIDATION";
- if (getenv(m_strEnvVar.c_str()) != NULL) {
- bUnsetEnvVar = false;
- } else {
- setenv(m_strEnvVar.c_str(), "1", 0);
- }
- }
- }
-
- ~TestCleanup()
- {
- if (!m_strRootCAPath.empty()) {
- removeCertGivenByFilename(m_strRootCAPath.c_str());
- }
-
- if (!m_strEnvVar.empty()) {
- unsetenv(m_strEnvVar.c_str());
- }
- }
-
- void setRootCAPath(const std::string& strRootCAPath)
- {
- m_strRootCAPath = strRootCAPath;
- }
-
- private:
- std::string m_strRootCAPath;
- std::string m_strEnvVar;
-};
-
-class PolicyChanger : public DPL::Event::EventListener<AceUpdateResponseEvent>
-{
- public:
- PolicyChanger()
- {
- DPL::Event::EventDeliverySystem::AddListener<AceUpdateResponseEvent>(this);
- }
-
- ~PolicyChanger()
- {
- DPL::Event::EventDeliverySystem::RemoveListener<AceUpdateResponseEvent>(this);
- }
-
- void OnEventReceived(const AceUpdateResponseEvent& event)
- {
- if (0 != event.GetArg0()) {
- LogError("Policy change failed");
- }
- Assert(0 == event.GetArg0() && "Policy change failed");
- LoopControl::finish_wait_for_wrt_init();
- }
-
- void updatePolicy(const std::string& path)
- {
- AceUpdateRequestEvent event(path);
- DPL::Event::EventDeliverySystem::Publish(event);
- LoopControl::wait_for_wrt_init();
- }
-};
-
-} // namespace anonymous
-
-using namespace ValidationCore;
-
-///////////////////////////////////////////////////
-////////////// INTEGRATION TESTS ////////////////
-///////////////////////////////////////////////////
-
-// TODO later maybe there will be another session mechanism?
-//RUNNER_TEST(test47_session_test)
-//{
-// SigTestBase test(widget_store_path + "blankWidget.wgt");
-// test.StartTest();
-// test.runWidget();
-// std::string session1 = test.getSession();
-// test.stopWidget();
-// test.runWidget();
-// std::string session2 = test.getSession();
-// test.stopWidget();
-// LogInfo("session1: " << session1 << " session2: " << session2);
-// RUNNER_ASSERT_MSG(session1 != session2 , "Session didn't change.");
-//}
-
-RUNNER_TEST(test48t01_fingerprint_test)
-{
- SigTestBase test(widget_store_path + "fingerprint_test.wgt");
-
- test.StartTest();
- test.CheckIsValid();
-
- WidgetCertificateData data;
-
- LogInfo("Widget installed, checking fingerprints");
-
- CHECK_FINGERPRINT(
- test,
- "md5 3D:E8:DF:C0:E9:12:8F:31:65:55:0E:B7:C5:EA:45:BA",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY);
-
- CHECK_FINGERPRINT(
- test,
- "sha-1 FD:93:7C:D5:55:3D:1C:6E:F9:67:62:32:D7:DF:58:E5:87:67:6F:0A",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY);
-
- CHECK_COMMONNAME(
- test,
- "Filip",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY);
-
- CHECK_FINGERPRINT(
- test,
- "md5 30:FD:DD:C4:C7:45:F2:CB:2F:91:72:93:CB:2E:6C:77",
- WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ENDENTITY);
-
- CHECK_FINGERPRINT(
- test,
- "sha-1 29:8B:99:8E:53:70:57:21:3F:DF:9B:93:0F:AA:8B:0D:43:C7:1D:11",
- WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ENDENTITY);
-
- CHECK_COMMONNAME(
- test,
- "magda",
- WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ENDENTITY);
-}
-
-RUNNER_TEST(test48t02_fingerprint_root_test)
-{
- SigTestBase test(widget_store_path + "fingerprint_test.wgt");
-
- test.StartTest();
- test.CheckIsValid();
-
- LogInfo("Widget installed, checking root fingerprints");
-
- CHECK_FINGERPRINT(
- test,
- "md5 C5:56:C8:1C:D6:6B:F3:4A:36:2D:A9:01:A2:FD:2E:AD",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ROOT);
-
- CHECK_FINGERPRINT(
- test,
- "sha-1 C2:C4:B5:72:9A:CF:D9:72:C5:DE:C1:E1:30:FF:74:7F:7A:AF:27:12",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ROOT);
-
- CHECK_COMMONNAME(
- test,
- "Samsung",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ROOT);
-
- CHECK_FINGERPRINT(
- test,
- "md5 C5:56:C8:1C:D6:6B:F3:4A:36:2D:A9:01:A2:FD:2E:AD",
- WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ROOT);
-
- CHECK_FINGERPRINT(
- test,
- "sha-1 C2:C4:B5:72:9A:CF:D9:72:C5:DE:C1:E1:30:FF:74:7F:7A:AF:27:12",
- WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ROOT);
-
- CHECK_COMMONNAME(
- test,
- "Samsung",
- WidgetCertificateData::DISTRIBUTOR,
- WidgetCertificateData::ROOT);
-}
-
-//RUNNER_TEST(test49t01_domain_selfsigned_recognized)
-//{
-// SigTestBase test(widget_store_path + "selfsignedrecognized.wgt");
-// test.StartTest();
-// test.CheckIsValid();
-//
-// test.checkIsRecognized(false);
-// test.checkIsDistributorSigned(true);
-//}
-//
-//
-//RUNNER_TEST(test49t02_domain_selfsigned_unrecognized)
-//{
-// SigTestBase test(widget_store_path + "selfsignedunrecognized.wgt");
-// test.StartTest();
-// test.CheckIsValid();
-//
-// test.checkIsRecognized(false);
-// test.checkIsDistributorSigned(false);
-//}
-
-RUNNER_TEST(test50t01_recognized_policy_data)
-{
- SigTestBase test(widget_store_path + "recognized.wgt");
- test.StartTest();
- test.CheckIsValid();
-
- test.checkIsRecognized(true);
-
- CHECK_FINGERPRINT(
- test,
- "sha-1 C2:C4:B5:72:9A:CF:D9:72:C5:DE:C1:E1:30:FF:74:7F:7A:AF:27:12",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ROOT);
- CHECK_FINGERPRINT(
- test,
- "sha-1 F0:FC:68:2E:69:0F:49:74:12:0E:9C:B1:E7:E1:0A:78:3E:39:22:D4",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY);
-}
-
-RUNNER_TEST(test50t02_recognized_policy_data)
-{
- SigTestBase test(widget_store_path + "recognized1.wgt");
- test.StartTest();
- test.CheckIsValid();
-
- test.checkIsRecognized(true);
-
- CHECK_FINGERPRINT(
- test,
- "sha-1 70:08:98:16:78:B8:1C:54:77:0B:3F:D1:DC:D4:84:EB:6F:73:09:D4",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY);
-}
-
-RUNNER_TEST(test50t03_unrecognized_policy_data)
-{
- SigTestBase test(widget_store_path + "unrecognized.wgt");
- test.StartTest();
- test.CheckIsValid();
-
- test.checkIsRecognized(false);
-
- CHECK_FINGERPRINT_FAIL(
- test,
- "sha-1 70:08:98:16:78:B8:1C:54:77:0B:3F:D1:DC:D4:84:EB:6F:73:09:D4",
- WidgetCertificateData::AUTHOR,
- WidgetCertificateData::ENDENTITY);
-}
-
-RUNNER_TEST(test90_security_check_during_launching)
-{
- // setup policy
- PolicyChanger changer;
- changer.updatePolicy("/usr/etc/ace/UnrestrictedPolicy.xml");
-
- // install widget
- SigTestBase test(widget_store_path + "not_allowed.wgt");
- test.StartTest(); // install widget
-
- // change policy
- changer.updatePolicy("/usr/etc/ace/demo.xml");
-
- // launch widget
- test.runWidget();
-
- // make sure there's no error from ACE (ACE check is removed)
- RUNNER_ASSERT(test.getStatus() != WRT_ERROR_ACCESS_DENIED);
-
- // make sure there's no other error
- RUNNER_ASSERT(test.getStatus() == WRT_SUCCESS);
-}
+++ /dev/null
------BEGIN CERTIFICATE-----
-MIIEuDCCA6CgAwIBAgIBBDANBgkqhkiG9w0BAQUFADCBtDELMAkGA1UEBhMCQlIx
-EzARBgNVBAoTCklDUC1CcmFzaWwxPTA7BgNVBAsTNEluc3RpdHV0byBOYWNpb25h
-bCBkZSBUZWNub2xvZ2lhIGRhIEluZm9ybWFjYW8gLSBJVEkxETAPBgNVBAcTCEJy
-YXNpbGlhMQswCQYDVQQIEwJERjExMC8GA1UEAxMoQXV0b3JpZGFkZSBDZXJ0aWZp
-Y2Fkb3JhIFJhaXogQnJhc2lsZWlyYTAeFw0wMTExMzAxMjU4MDBaFw0xMTExMzAy
-MzU5MDBaMIG0MQswCQYDVQQGEwJCUjETMBEGA1UEChMKSUNQLUJyYXNpbDE9MDsG
-A1UECxM0SW5zdGl0dXRvIE5hY2lvbmFsIGRlIFRlY25vbG9naWEgZGEgSW5mb3Jt
-YWNhbyAtIElUSTERMA8GA1UEBxMIQnJhc2lsaWExCzAJBgNVBAgTAkRGMTEwLwYD
-VQQDEyhBdXRvcmlkYWRlIENlcnRpZmljYWRvcmEgUmFpeiBCcmFzaWxlaXJhMIIB
-IjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwPMudwX/hvm+Uh2b/lQAcHVA
-isamaLkWdkwP9/S/tOKIgRrL6Oy+ZIGlOUdd6uYtk9Ma/3pUpgcfNAj0vYm5gsyj
-Qo9emsc+x6m4VWwk9iqMZSCK5EQkAq/Ut4n7KuLE1+gdftwdIgxfUsPt4CyNrY50
-QV57KM2UT8x5rrmzEjr7TICGpSUAl2gVqe6xaii+bmYR1QrmWaBSAG59LrkrjrYt
-bRhFboUDe1DK+6T8s5L6k8c8okpbHpa9veMztDVC9sPJ60MWXh6anVKo1UcLcbUR
-yEeNvZneVRKAAU6ouwdjDvwlsaKydFKwed0ToQ47bmUKgcm+wV3eTRk36UOnTwID
-AQABo4HSMIHPME4GA1UdIARHMEUwQwYFYEwBAQAwOjA4BggrBgEFBQcCARYsaHR0
-cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0RQQ2FjcmFpei5wZGYwPQYDVR0f
-BDYwNDAyoDCgLoYsaHR0cDovL2FjcmFpei5pY3BicmFzaWwuZ292LmJyL0xDUmFj
-cmFpei5jcmwwHQYDVR0OBBYEFIr68VeEERM1kEL6V0lUaQ2kxPA3MA8GA1UdEwEB
-/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3DQEBBQUAA4IBAQAZA5c1
-U/hgIh6OcgLAfiJgFWpvmDZWqlV30/bHFpj8iBobJSm5uDpt7TirYh1Uxe3fQaGl
-YjJe+9zd+izPRbBqXPVQA34EXcwk4qpWuf1hHriWfdrx8AcqSqr6CuQFwSr75Fos
-SzlwDADa70mT7wZjAmQhnZx2xJ6wfWlT9VQfS//JYeIc7Fue2JNLd00UOSMMaiK/
-t79enKNHEA2fupH3vEigf5Eh4bVAN5VohrTm6MY53x7XQZZr1ME7a55lFEnSeT0u
-mlOAjR2mAbvSM5X5oSZNrmetdzyTj2flCM8CC7MLab0kkdngRIlUBGHF1/S5nmPb
-K+9A46sd33oqK8n8
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHPTCCBSWgAwIBAgIBADANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wMzAzMzAxMjI5NDlaFw0zMzAzMjkxMjI5NDlaMHkxEDAO
-BgNVBAoTB1Jvb3QgQ0ExHjAcBgNVBAsTFWh0dHA6Ly93d3cuY2FjZXJ0Lm9yZzEi
-MCAGA1UEAxMZQ0EgQ2VydCBTaWduaW5nIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJ
-ARYSc3VwcG9ydEBjYWNlcnQub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAziLA4kZ97DYoB1CW8qAzQIxL8TtmPzHlawI229Z89vGIj053NgVBlfkJ
-8BLPRoZzYLdufujAWGSuzbCtRRcMY/pnCujW0r8+55jE8Ez64AO7NV1sId6eINm6
-zWYyN3L69wj1x81YyY7nDl7qPv4coRQKFWyGhFtkZip6qUtTefWIonvuLwphK42y
-fk1WpRPs6tqSnqxEQR5YYGUFZvjARL3LlPdCfgv3ZWiYUQXw8wWRBB0bF4LsyFe7
-w2t6iPGwcswlWyCR7BYCEo8y6RcYSNDHBS4CMEK4JZwFaz+qOqfrU0j36NK2B5jc
-G8Y0f3/JHIJ6BVgrCFvzOKKrF11myZjXnhCLotLddJr3cQxyYN/Nb5gznZY0dj4k
-epKwDpUeb+agRThHqtdB7Uq3EvbXG4OKDy7YCbZZ16oE/9KTfWgu3YtLq1i6L43q
-laegw1SJpfvbi1EinbLDvhG+LJGGi5Z4rSDTii8aP8bQUWWHIbEZAWV/RRyH9XzQ
-QUxPKZgh/TMfdQwEUfoZd9vUFBzugcMd9Zi3aQaRIt0AUMyBMawSB3s42mhb5ivU
-fslfrejrckzzAeVLIL+aplfKkQABi6F1ITe1Yw1nPkZPcCBnzsXWWdsC4PDSy826
-YreQQejdIOQpvGQpQsgi3Hia/0PsmBsJUUtaWsJx8cTLc6nloQsCAwEAAaOCAc4w
-ggHKMB0GA1UdDgQWBBQWtTIb1Mfz4OaO873SsDrusjkY0TCBowYDVR0jBIGbMIGY
-gBQWtTIb1Mfz4OaO873SsDrusjkY0aF9pHsweTEQMA4GA1UEChMHUm9vdCBDQTEe
-MBwGA1UECxMVaHR0cDovL3d3dy5jYWNlcnQub3JnMSIwIAYDVQQDExlDQSBDZXJ0
-IFNpZ25pbmcgQXV0aG9yaXR5MSEwHwYJKoZIhvcNAQkBFhJzdXBwb3J0QGNhY2Vy
-dC5vcmeCAQAwDwYDVR0TAQH/BAUwAwEB/zAyBgNVHR8EKzApMCegJaAjhiFodHRw
-czovL3d3dy5jYWNlcnQub3JnL3Jldm9rZS5jcmwwMAYJYIZIAYb4QgEEBCMWIWh0
-dHBzOi8vd3d3LmNhY2VydC5vcmcvcmV2b2tlLmNybDA0BglghkgBhvhCAQgEJxYl
-aHR0cDovL3d3dy5jYWNlcnQub3JnL2luZGV4LnBocD9pZD0xMDBWBglghkgBhvhC
-AQ0ESRZHVG8gZ2V0IHlvdXIgb3duIGNlcnRpZmljYXRlIGZvciBGUkVFIGhlYWQg
-b3ZlciB0byBodHRwOi8vd3d3LmNhY2VydC5vcmcwDQYJKoZIhvcNAQEEBQADggIB
-ACjH7pyCArpcgBLKNQodgW+JapnM8mgPf6fhjViVPr3yBsOQWqy1YPaZQwGjiHCc
-nWKdpIevZ1gNMDY75q1I08t0AoZxPuIrA2jxNGJARjtT6ij0rPtmlVOKTV39O9lg
-18p5aTuxZZKmxoGCXJzN600BiqXfEVWqFcofN8CCmHBh22p8lqOOLlQ+TyGpkO/c
-gr/c6EWtTZBzCDyUZbAEmXZ/4rzCahWqlwQ3JNgelE5tDlG+1sSPypZt90Pf6DBl
-Jzt7u0NDY8RD97LsaMzhGY4i+5jhe1o+ATc7iwiwovOVThrLm82asduycPAtStvY
-sONvRUgzEv/+PDIqVPfE94rwiCPCR/5kenHA0R6mY7AHfqQv0wGP3J8rtsYIqQ+T
-SCX8Ev2fQtzzxD72V7DX3WnRBnc0CkvSyqD/HMaMyRa+xMwyN2hzXwj7UfdJUzYF
-CpUCTPJ5GhD22Dp1nPMd8aINcGeGG7MW9S/lpOt5hvk9C8JzC6WZrG/8Z7jlLwum
-GCSNe9FINSkYQKyTYOGWhlC0elnYjyELn8+CkcY7v2vcB5G5l1YjqrZslMZIBjzk
-zk6q5PYvCdxTby78dOs6Y5nCpqyJvKeyRKANihDjbPIky/qbn3BHLt4Ui9SyIAmW
-omTxJBzcoTWcFbLUvFUufQb1nA5V9FrWk9p2rSVzTMVD
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGCDCCA/CgAwIBAgIBATANBgkqhkiG9w0BAQQFADB5MRAwDgYDVQQKEwdSb290
-IENBMR4wHAYDVQQLExVodHRwOi8vd3d3LmNhY2VydC5vcmcxIjAgBgNVBAMTGUNB
-IENlcnQgU2lnbmluZyBBdXRob3JpdHkxITAfBgkqhkiG9w0BCQEWEnN1cHBvcnRA
-Y2FjZXJ0Lm9yZzAeFw0wNTEwMTQwNzM2NTVaFw0zMzAzMjgwNzM2NTVaMFQxFDAS
-BgNVBAoTC0NBY2VydCBJbmMuMR4wHAYDVQQLExVodHRwOi8vd3d3LkNBY2VydC5v
-cmcxHDAaBgNVBAMTE0NBY2VydCBDbGFzcyAzIFJvb3QwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCrSTURSHzSJn5TlM9Dqd0o10Iqi/OHeBlYfA+e2ol9
-4fvrcpANdKGWZKufoCSZc9riVXbHF3v1BKxGuMO+f2SNEGwk82GcwPKQ+lHm9WkB
-Y8MPVuJKQs/iRIwlKKjFeQl9RrmK8+nzNCkIReQcn8uUBByBqBSzmGXEQ+xOgo0J
-0b2qW42S0OzekMV/CsLj6+YxWl50PpczWejDAz1gM7/30W9HxM3uYoNSbi4ImqTZ
-FRiRpoWSR7CuSOtttyHshRpocjWr//AQXcD0lKdq1TuSfkyQBX6TwSyLpI5idBVx
-bgtxA+qvFTia1NIFcm+M+SvrWnIl+TlG43IbPgTDZCciECqKT1inA62+tC4T7V2q
-SNfVfdQqe1z6RgRQ5MwOQluM7dvyz/yWk+DbETZUYjQ4jwxgmzuXVjit89Jbi6Bb
-6k6WuHzX1aCGcEDTkSm3ojyt9Yy7zxqSiuQ0e8DYbF/pCsLDpyCaWt8sXVJcukfV
-m+8kKHA4IC/VfynAskEDaJLM4JzMl0tF7zoQCqtwOpiVcK01seqFK6QcgCExqa5g
-eoAmSAC4AcCTY1UikTxW56/bOiXzjzFU6iaLgVn5odFTEcV7nQP2dBHgbbEsPyyG
-kZlxmqZ3izRg0RS0LKydr4wQ05/EavhvE/xzWfdmQnQeiuP43NJvmJzLR5iVQAX7
-6QIDAQABo4G/MIG8MA8GA1UdEwEB/wQFMAMBAf8wXQYIKwYBBQUHAQEEUTBPMCMG
-CCsGAQUFBzABhhdodHRwOi8vb2NzcC5DQWNlcnQub3JnLzAoBggrBgEFBQcwAoYc
-aHR0cDovL3d3dy5DQWNlcnQub3JnL2NhLmNydDBKBgNVHSAEQzBBMD8GCCsGAQQB
-gZBKMDMwMQYIKwYBBQUHAgEWJWh0dHA6Ly93d3cuQ0FjZXJ0Lm9yZy9pbmRleC5w
-aHA/aWQ9MTAwDQYJKoZIhvcNAQEEBQADggIBAH8IiKHaGlBJ2on7oQhy84r3HsQ6
-tHlbIDCxRd7CXdNlafHCXVRUPIVfuXtCkcKZ/RtRm6tGpaEQU55tiKxzbiwzpvD0
-nuB1wT6IRanhZkP+VlrRekF490DaSjrxC1uluxYG5sLnk7mFTZdPsR44Q4Dvmw2M
-77inYACHV30eRBzLI++bPJmdr7UpHEV5FpZNJ23xHGzDwlVks7wU4vOkHx4y/CcV
-Bc/dLq4+gmF78CEQGPZE6lM5+dzQmiDgxrvgu1pPxJnIB721vaLbLmINQjRBvP+L
-ivVRIqqIMADisNS8vmW61QNXeZvo3MhN+FDtkaVSKKKs+zZYPumUK5FQhxvWXtaM
-zPcPEAxSTtAWYeXlCmy/F8dyRlecmPVsYGN6b165Ti/Iubm7aoW8mA3t+T6XhDSU
-rgCvoeXnkm5OvfPi2RSLXNLrAWygF6UtEOucekq9ve7O/e0iQKtwOIj1CodqwqsF
-YMlIBdpTwd5Ed2qz8zw87YC8pjhKKSRf/lk7myV6VmMAZLldpGJ9VzZPrYPvH5JT
-oI53V93lYRE9IwCQTDz6o2CTBKOvNfYOao9PSmCnhQVsRqGP9Md246FZV/dxssRu
-FFxtbUFm3xuTsdQAw+7Lzzw9IYCpX2Nl/N3gX6T0K/CFcUHUZyX7GrGXrtaZghNB
-0m6lG5kngOcLqagA
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIESzCCAzOgAwIBAgIJAJigUTEEXRQpMA0GCSqGSIb3DQEBBQUAMHYxCzAJBgNV
-BAYTAkRFMQ8wDQYDVQQIEwZIZXNzZW4xDjAMBgNVBAcTBUZ1bGRhMRAwDgYDVQQK
-EwdEZWJjb25mMRMwEQYDVQQDEwpEZWJjb25mIENBMR8wHQYJKoZIhvcNAQkBFhBq
-b2VyZ0BkZWJpYW4ub3JnMB4XDTA1MTEwNTE3NTUxNFoXDTE1MTEwMzE3NTUxNFow
-djELMAkGA1UEBhMCREUxDzANBgNVBAgTBkhlc3NlbjEOMAwGA1UEBxMFRnVsZGEx
-EDAOBgNVBAoTB0RlYmNvbmYxEzARBgNVBAMTCkRlYmNvbmYgQ0ExHzAdBgkqhkiG
-9w0BCQEWEGpvZXJnQGRlYmlhbi5vcmcwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCvbOo0SrIwI5IMlsshH8WF3dHB9r9JlSKhMPaybawa1EyvZspMQ3wa
-F5qxNf3Sj+NElEmjseEqvCZiIIzqwerHu0Qw62cDYCdCd2+Wb5m0bPYB5CGHiyU1
-eNP0je42O0YeXG2BvUujN8AviocVo39X2YwNQ0ryy4OaqYgm2pRlbtT2ESbF+SfV
-Y2iqQj/f8ymF+lHo/pz8tbAqxWcqaSiHFAVQJrdqtFhtoodoNiE3q76zJoUkZTXB
-k60Yc3MJSnatZCpnsSBr/D7zpntl0THrUjjtdRWCjQVhqfhM1yZJV+ApbLdheFh0
-ZWlSxdnp25p0q0XYw/7G92ELyFDfBUUNAgMBAAGjgdswgdgwHQYDVR0OBBYEFMuV
-dFNb4mCWUFbcP5LOtxFLrEVTMIGoBgNVHSMEgaAwgZ2AFMuVdFNb4mCWUFbcP5LO
-txFLrEVToXqkeDB2MQswCQYDVQQGEwJERTEPMA0GA1UECBMGSGVzc2VuMQ4wDAYD
-VQQHEwVGdWxkYTEQMA4GA1UEChMHRGViY29uZjETMBEGA1UEAxMKRGViY29uZiBD
-QTEfMB0GCSqGSIb3DQEJARYQam9lcmdAZGViaWFuLm9yZ4IJAJigUTEEXRQpMAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADggEBAGZXxHg4mnkvilRIM1EQfGdY
-S5b/WcyF2MYSTeTvK4aIB6VHwpZoZCnDGj2m2D3CkHT0upAD9o0zM1tdsfncLzV+
-mDT/jNmBtYo4QXx5vEPwvEIcgrWjwk7SyaEUhZjtolTkHB7ACl0oD0r71St4iEPR
-qTUCEXk2E47bg1Fz58wNt/yo2+4iqiRjg1XCH4evkQuhpW+dTZnDyFNqwSYZapOE
-TBA+9zBb6xD1KM2DdY7r4GiyYItN0BKLfuWbh9LXGbl1C+f4P11g+m2MPiavIeCe
-1iazG5pcS3KoTLACsYlEX24TINtg4kcuS81XdllcnsV3Kdts0nIqPj6uhTTZD0k=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDvjCCA3ygAwIBAgIFJQaThoEwCwYHKoZIzjgEAwUAMIGFMQswCQYDVQQGEwJG
-UjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYDVQQHEwVQYXJpczEQMA4GA1UEChMHUE0v
-U0dETjEOMAwGA1UECxMFRENTU0kxDjAMBgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcN
-AQkBFhRpZ2NhQHNnZG4ucG0uZ291di5mcjAeFw0wMjEyMTMxNDM5MTVaFw0yMDEw
-MTcxNDM5MTRaMIGFMQswCQYDVQQGEwJGUjEPMA0GA1UECBMGRnJhbmNlMQ4wDAYD
-VQQHEwVQYXJpczEQMA4GA1UEChMHUE0vU0dETjEOMAwGA1UECxMFRENTU0kxDjAM
-BgNVBAMTBUlHQy9BMSMwIQYJKoZIhvcNAQkBFhRpZ2NhQHNnZG4ucG0uZ291di5m
-cjCCAbYwggErBgcqhkjOOAQBMIIBHgKBgQCFkMImdk9zDzJfTO4XPdAAmLbAdWws
-ZiEMZh19RyTo3CyhFqO77OIXrwY6vc1pcc3MgWJ0dgQpAgrDMtmFFxpUu4gmjVsx
-8GpxQC+4VOgLY8Cvmcd/UDzYg07EIRto8BwCpPJ/JfUxwzV2V3N713aAX+cEoKZ/
-s+kgxC6nZCA7oQIVALME/JYjkdW2uKIGngsEPbXAjdhDAoGADh/uqWJx94UBm31c
-9d8ZTBfRGRnmSSRVFDgPWgA69JD4BR5da8tKz+1HjfMhDXljbMH86ixpD5Ka1Z0V
-pRYUPbyAoB37tsmXMJY7kjyD19d5VdaZboUjVvhH6UJy5lpNNNGSvFl4fqkxyvw+
-pq1QV0N5RcvK120hlXdfHUX+YKYDgYQAAoGAQGr7IuKJcYIvJRMjxwl43KxXY2xC
-aoCiM/bv117MfI94aNf1UusGhp7CbYAY9CXuL60P0oPMAajbaTE5Z34AuITeHq3Y
-CNMHwxalip8BHqSSGmGiQsXeK7T+r1rPXsccZ1c5ikGDZ4xn5gUaCyy2rCmb+fOJ
-6VAfCbAbAjmNKwejdzB1MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgFGMBUG
-A1UdIAQOMAwwCgYIKoF6AXkBAQEwHQYDVR0OBBYEFPkeNRcUf8idzpKblYbLNxs0
-MQhSMB8GA1UdIwQYMBaAFPkeNRcUf8idzpKblYbLNxs0MQhSMAsGByqGSM44BAMF
-AAMvADAsAhRVh+CJA5eVyEYU5AO9Tm7GxX0rmQIUBCqsU5u1WxoZ5lEXicDX5/Ob
-sRQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEAjCCAuqgAwIBAgIFORFFEJQwDQYJKoZIhvcNAQEFBQAwgYUxCzAJBgNVBAYT
-AkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAMBgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQ
-TS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEOMAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG
-9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2LmZyMB4XDTAyMTIxMzE0MjkyM1oXDTIw
-MTAxNzE0MjkyMlowgYUxCzAJBgNVBAYTAkZSMQ8wDQYDVQQIEwZGcmFuY2UxDjAM
-BgNVBAcTBVBhcmlzMRAwDgYDVQQKEwdQTS9TR0ROMQ4wDAYDVQQLEwVEQ1NTSTEO
-MAwGA1UEAxMFSUdDL0ExIzAhBgkqhkiG9w0BCQEWFGlnY2FAc2dkbi5wbS5nb3V2
-LmZyMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsh/R0GLFMzvABIaI
-s9z4iPf930Pfeo2aSVz2TqrMHLmh6yeJ8kbpO0px1R2OLc/mratjUMdUC24SyZA2
-xtgv2pGqaMVy/hcKshd+ebUyiHDKcMCWSo7kVc0dJ5S/znIq7Fz5cyD+vfcuiWe4
-u0dzEvfRNWk68gq5rv9GQkaiv6GFGvm/5P9JhfejcIYyHF2fYPepraX/z9E0+X1b
-F8bc1g4oa8Ld8fUzaJ1O/Id8NhLWo4DoQw1VYZTqZDdH6nfK0LJYBcNdfrGoRpAx
-Vs5wKpayMLh35nnAvSk7/ZR3TL0gzUEl4C7HG7vupARB0l2tEmqKm0f7yd1GQOGd
-PDPQtQIDAQABo3cwdTAPBgNVHRMBAf8EBTADAQH/MAsGA1UdDwQEAwIBRjAVBgNV
-HSAEDjAMMAoGCCqBegF5AQEBMB0GA1UdDgQWBBSjBS8YYFDCiQrdKyFP/45OqDAx
-NjAfBgNVHSMEGDAWgBSjBS8YYFDCiQrdKyFP/45OqDAxNjANBgkqhkiG9w0BAQUF
-AAOCAQEABdwm2Pp3FURo/C9mOnTgXeQp/wYHE4RKq89toB9RlPhJy3Q2FLwV3duJ
-L92PoF189RLrn544pEfMs5bZvpwlqwN+Mw+VgQ39FuCIvjfwbF3QMZsyK10XZZOY
-YLxuj7GoPB7ZHPOpJkL5ZB3C55L29B5aqhlSXa/oovdgoPaN8In1buAKBQGVyYsg
-Crpa/JosPL3Dt8ldeCUFP1YUmwza+zpI/pdpXsoQhvdOlgQITeywvl3cO45Pwf2a
-NjSaTFR+FwNIlQgRHAdvhQh+XU3Endv7rs6y0bO4g2wdsrN58dhwmX7wEwLOXt1R
-0982gaEbeC9xs/FZTEYYKKuF0mBWWg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtTCCAp2gAwIBAgIRANAeQJAAAEZSAAAAAQAAAAQwDQYJKoZIhvcNAQEFBQAw
-gYkxCzAJBgNVBAYTAlVTMQswCQYDVQQIEwJEQzETMBEGA1UEBxMKV2FzaGluZ3Rv
-bjEXMBUGA1UEChMOQUJBLkVDT00sIElOQy4xGTAXBgNVBAMTEEFCQS5FQ09NIFJv
-b3QgQ0ExJDAiBgkqhkiG9w0BCQEWFWFkbWluQGRpZ3NpZ3RydXN0LmNvbTAeFw05
-OTA3MTIxNzMzNTNaFw0wOTA3MDkxNzMzNTNaMIGJMQswCQYDVQQGEwJVUzELMAkG
-A1UECBMCREMxEzARBgNVBAcTCldhc2hpbmd0b24xFzAVBgNVBAoTDkFCQS5FQ09N
-LCBJTkMuMRkwFwYDVQQDExBBQkEuRUNPTSBSb290IENBMSQwIgYJKoZIhvcNAQkB
-FhVhZG1pbkBkaWdzaWd0cnVzdC5jb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAw
-ggEKAoIBAQCx0xHgeVVDBwhMywVCAOINg0Y95JO6tgbTDVm9PsHOQ2cBiiGo77zM
-0KLMsFWWU4RmBQDaREmA2FQKpSWGlO1jVv9wbKOhGdJ4vmgqRF4vz8wYXke8OrFG
-PR7wuSw0X4x8TAgpnUBV6zx9g9618PeKgw6hTLQ6pbNfWiKX7BmbwQVo/ea3qZGU
-LOR4SCQaJRk665WcOQqKz0Ky8BzVX/tr7WhWezkscjiw7pOp03t3POtxA6k4ShZs
-iSrK2jMTecJVjO2cu/LLWxD4LmE1xilMKtAqY9FlWbT4zfn0AIS2V0KFnTKo+SpU
-+/94Qby9cSj0u5C8/5Y0BONFnqFGKECBAgMBAAGjFjAUMBIGA1UdEwEB/wQIMAYB
-Af8CAQgwDQYJKoZIhvcNAQEFBQADggEBAARvJYbk5pYntNlCwNDJALF/VD6Hsm0k
-qS8Kfv2kRLD4VAe9G52dyntQJHsRW0mjpr8SdNWJt7cvmGQlFLdh6X9ggGvTZOir
-vRrWUfrAtF13Gn9kCF55xgVM8XrdTX3O5kh7VNJhkoHWG9YA8A6eKHegTYjHInYZ
-w8eeG6Z3ePhfm1bR8PIXrI6dWeYf/le22V7hXZ9F7GFoGUHhsiAm/lowdiT/QHI8
-eZ98IkirRs3bs4Ysj78FQdPB4xTjQRcm0HyncUwZ6EoPclgxfexgeqMiKL0ZJGA/
-O4dzwGvky663qyVDslUte6sGDnVdNOVdc22esnVApVnJTzFxiNmIf1Q=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
-IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyOTA2MDAwMFoXDTM3MTEyMDE1
-MDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
-SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
-IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIw
-DQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJnej8Mlo2k06AX3dLm/WpcZuS+U
-0pPlLYnKhHw/EEMbjIt8hFj4JHxIzyr9wBXZGH6EGhfT257XyuTZ16pYUYfw8ItI
-TuLCxFlpMGK2MKKMCxGZYTVtfu/FsRkGIBKOQuHfD5YQUqjPnF+VFNivO3ULMSAf
-RC+iYkGzuxgh28pxPIzstrkNn+9R7017EvILDOGsQI93f7DKeHEMXRZxcKLXwjqF
-zQ6axOAAsNUl6twr5JQtOJyJQVdkKGUZHLZEtMgxa44Be3ZZJX8VHIQIfHNlIAqh
-BC4aMqiaILGcLCFZ5/vP7nAtCMpjPiybkxlqpMKX/7eGV4iFbJ4VFitNLLMCAwEA
-AaNjMGEwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUoTYwFsuGkABFgFOxj8jY
-PXy+XxIwHwYDVR0jBBgwFoAUoTYwFsuGkABFgFOxj8jYPXy+XxIwDgYDVR0PAQH/
-BAQDAgGGMA0GCSqGSIb3DQEBBQUAA4IBAQCKIBilvrMvtKaEAEAwKfq0FHNMeUWn
-9nDg6H5kHgqVfGphwu9OH77/yZkfB2FK4V1Mza3u0FIy2VkyvNp5ctZ7CegCgTXT
-Ct8RHcl5oIBN/lrXVtbtDyqvpxh1MwzqwWEFT2qaifKNuZ8u77BfWgDrvq2g+EQF
-Z7zLBO+eZMXpyD8Fv8YvBxzDNnGGyjhmSs3WuEvGbKeXO/oTLW4jYYehY0KswsuX
-n2Fozy1MBJ3XJU8KDk2QixhWqJNIV9xvrr2eZ1d3iVCzvhGbRWeDhhmH05i9CBoW
-H1iCC+GWaQVLjuyDUTEH1dSf/1l7qG6Fz9NLqUmwX7A5KGgOc90lmt4S
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF5jCCA86gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBgzELMAkGA1UEBhMCVVMx
-HTAbBgNVBAoTFEFPTCBUaW1lIFdhcm5lciBJbmMuMRwwGgYDVQQLExNBbWVyaWNh
-IE9ubGluZSBJbmMuMTcwNQYDVQQDEy5BT0wgVGltZSBXYXJuZXIgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyOTA2MDAwMFoXDTM3MDkyODIz
-NDMwMFowgYMxCzAJBgNVBAYTAlVTMR0wGwYDVQQKExRBT0wgVGltZSBXYXJuZXIg
-SW5jLjEcMBoGA1UECxMTQW1lcmljYSBPbmxpbmUgSW5jLjE3MDUGA1UEAxMuQU9M
-IFRpbWUgV2FybmVyIFJvb3QgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIw
-DQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBALQ3WggWmRToVbEbJGv8x4vmh6mJ
-7ouZzU9AhqS2TcnZsdw8TQ2FTBVsRotSeJ/4I/1n9SQ6aF3Q92RhQVSji6UI0ilb
-m2BPJoPRYxJWSXakFsKlnUWsi4SVqBax7J/qJBrvuVdcmiQhLE0OcR+mrF1FdAOY
-xFSMFkpBd4aVdQxHAWZg/BXxD+r1FHjHDtdugRxev17nOirYlxcwfACtCJ0zr7iZ
-YYCLqJV+FNwSbKTQ2O9ASQI2+W6p1h2WVgSysy0WVoaP2SBXgM1nEG2wTPDaRrbq
-JS5Gr42whTg0ixQmgiusrpkLjhTXUr2eacOGAgvqdnUxCc4zGSGFQ+aJLZ8lN2fx
-I2rSAG2X+Z/nKcrdH9cG6rjJuQkhn8g/BsXS6RJGAE57COtCPStIbp1n3UsC5ETz
-kxmlJ85per5n0/xQpCyrw2u544BMzwVhSyvcG7mm0tCq9Stz+86QNZ8MUhy/XCFh
-EVsVS6kkUfykXPcXnbDS+gfpj1bkGoxoigTTfFrjnqKhynFbotSg5ymFXQNoKk/S
-Btc9+cMDLz9l+WceR0DTYw/j1Y75hauXTLPXJuuWCpTehTacyH+BCQJJKg71ZDIM
-gtG6aoIbs0t0EfOMd9afv9w3pKdVBC/UMejTRrkDfNoSTllkt1ExMVCgyhwn2RAu
-rda9EGYrw7AiShJbAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FE9pbQN+nZ8HGEO8txBO1b+pxCAoMB8GA1UdIwQYMBaAFE9pbQN+nZ8HGEO8txBO
-1b+pxCAoMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAO/Ouyugu
-h4X7ZVnnrREUpVe8WJ8kEle7+z802u6teio0cnAxa8cZmIDJgt43d15Ui47y6mdP
-yXSEkVYJ1eV6moG2gcKtNuTxVBFT8zRFASbI5Rq8NEQh3q0l/HYWdyGQgJhXnU7q
-7C+qPBR7V8F+GBRn7iTGvboVsNIYvbdVgaxTwOjdaRITQrcCtQVBynlQboIOcXKT
-RuidDV29rs4prWPVVRaAMCf/drr3uNZK49m1+VLQTkCpx+XCMseqdiThawVQ68W/
-ClTluUI8JPu3B5wwn3la5uBAUhX0/Kr0VvlEl4ftDmVyXr4m+02kLQgH3thcoNyB
-M5kYJRF3p+v9WAksmWsbivNSPxpNSGDxoPYzAlOL7SUJuA0t7Zdz7NeWH45gDtoQ
-my8YJPamTQr5O8t1wswvziRpyQoijlmn94IM19drNZxDAGrElWe6nEXLuA4399xO
-AU++CrYD062KRffaJ00psUjf5BHklka9bAI+1lHIlRcBFanyqqryvy9lG2/QuRqT
-9Y41xICHPpQvZuTpqP9BnHAqTyo5GJUefvthATxRCC4oGKQWDzH9OmwjkyB24f0H
-hdFbP9IcczLd+rn4jM8Ch3qaluTtT4mNU0OrDhPAARW0eTjb/G49nlG2uBOLZ8/5
-fNkiHfZdxRwBL5joeiQYvITX+txyW/fBOmg=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIENjCCAx6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBvMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxJjAkBgNVBAsTHUFkZFRydXN0IEV4dGVybmFs
-IFRUUCBOZXR3b3JrMSIwIAYDVQQDExlBZGRUcnVzdCBFeHRlcm5hbCBDQSBSb290
-MB4XDTAwMDUzMDEwNDgzOFoXDTIwMDUzMDEwNDgzOFowbzELMAkGA1UEBhMCU0Ux
-FDASBgNVBAoTC0FkZFRydXN0IEFCMSYwJAYDVQQLEx1BZGRUcnVzdCBFeHRlcm5h
-bCBUVFAgTmV0d29yazEiMCAGA1UEAxMZQWRkVHJ1c3QgRXh0ZXJuYWwgQ0EgUm9v
-dDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALf3GjPm8gAELTngTlvt
-H7xsD821+iO2zt6bETOXpClMfZOfvUq8k+0DGuOPz+VtUFrWlymUWoCwSXrbLpX9
-uMq/NzgtHj6RQa1wVsfwTz/oMp50ysiQVOnGXw94nZpAPA6sYapeFI+eh6FqUNzX
-mk6vBbOmcZSccbNQYArHE504B4YCqOmoaSYYkKtMsE8jqzpPhNjfzp/haW+710LX
-a0Tkx63ubUFfclpxCDezeWWkWaCUN/cALw3CknLa0Dhy2xSoRcRdKn23tNbE7qzN
-E0S3ySvdQwAl+mG5aWpYIxG3pzOPVnVZ9c0p10a3CitlttNCbxWyuHv77+ldU9U0
-WicCAwEAAaOB3DCB2TAdBgNVHQ4EFgQUrb2YejS0Jvf6xCZU7wO94CTLVBowCwYD
-VR0PBAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wgZkGA1UdIwSBkTCBjoAUrb2YejS0
-Jvf6xCZU7wO94CTLVBqhc6RxMG8xCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtBZGRU
-cnVzdCBBQjEmMCQGA1UECxMdQWRkVHJ1c3QgRXh0ZXJuYWwgVFRQIE5ldHdvcmsx
-IjAgBgNVBAMTGUFkZFRydXN0IEV4dGVybmFsIENBIFJvb3SCAQEwDQYJKoZIhvcN
-AQEFBQADggEBALCb4IUlwtYj4g+WBpKdQZic2YR5gdkeWxQHIzZlj7DYd7usQWxH
-YINRsPkyPef89iYTx4AWpb9a/IfPeHmJIZriTAcKhjW88t5RxNKWt9x+Tu5w/Rw5
-6wwCURQtjr0W4MHfRnXnJK3s9EK0hZNwEGe6nQY1ShjTK3rMUUKhemPR5ruhxSvC
-Nr4TDea9Y355e6cJDUCrat2PisP29owaQgVR1EX1n6diIWgVIEM8med8vSTYqZEX
-c4g/VhsxOBi0cQ+azcgOno4uG+GMmIPLHzHxREzGBHNJdmAPx/i9F4BrLunMTA5a
-mnkPIAou1Z5jJh5VkpTYghdae9C8x49OhgQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGDCCAwCgAwIBAgIBATANBgkqhkiG9w0BAQUFADBlMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwHhcNMDAwNTMw
-MTAzODMxWhcNMjAwNTMwMTAzODMxWjBlMQswCQYDVQQGEwJTRTEUMBIGA1UEChML
-QWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYD
-VQQDExhBZGRUcnVzdCBDbGFzcyAxIENBIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUA
-A4IBDwAwggEKAoIBAQCWltQhSWDia+hBBwzexODcEyPNwTXH+9ZOEQpnXvUGW2ul
-CDtbKRY654eyNAbFvAWlA3yCyykQruGIgb3WntP+LVbBFc7jJp0VLhD7Bo8wBN6n
-tGO0/7Gcrjyvd7ZWxbWroulpOj0OM3kyP3CCkplhbY0wCI9xP6ZIVxn4JdxLZlyl
-dI+Yrsj5wAYi56xz36Uu+1LcsRVlIPo1Zmne3yzxbrww2ywkEtvrNTVokMsAsJch
-PXQhI2U0K7t4WaPW4XY5mqRJjox0r26kmqPZm9I4XJuiGMx1I4S+6+JNM3GOGvDC
-+Mcdoq0Dlyz4zyXG9rgkMbFjXZJ/Y/AlyVMuH79NAgMBAAGjgdIwgc8wHQYDVR0O
-BBYEFJWxtPCUtr3H2tERCSG+wa9J/RB7MAsGA1UdDwQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MIGPBgNVHSMEgYcwgYSAFJWxtPCUtr3H2tERCSG+wa9J/RB7oWmkZzBl
-MQswCQYDVQQGEwJTRTEUMBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFk
-ZFRydXN0IFRUUCBOZXR3b3JrMSEwHwYDVQQDExhBZGRUcnVzdCBDbGFzcyAxIENB
-IFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBACxtZBsfzQ3duQH6lmM0MkhHma6X
-7f1yFqZzR1r0693p9db7RcwpiURdv0Y5PejuvE1Uhh4dbOMXJ0PhiVYrqW9yTkkz
-43J8KiOavD7/KCrto/8cI7pDVwlnTUtiBi34/2ydYB7YHEt9tTEv2dB8Xfjea4MY
-eDdXL+gzB2ffHsdrKpV2ro9Xo/D0UrSpUwjP4E/TelOL/bscVjby/rK25Xa71SJl
-pz/+0WatC7xrmYbvP33zGDLKe8bjq2RGlfgmadlVg3sslgf/WSxEo8bl6ancoWOA
-WiFeIc9TVPC6b4nbqKqVz4vjccweGyBECMB6tkD9xOQ14R0WHNC8K47Wcdk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCAv2gAwIBAgIBATANBgkqhkiG9w0BAQUFADBkMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSAwHgYDVQQDExdBZGRUcnVzdCBQdWJsaWMgQ0EgUm9vdDAeFw0wMDA1MzAx
-MDQxNTBaFw0yMDA1MzAxMDQxNTBaMGQxCzAJBgNVBAYTAlNFMRQwEgYDVQQKEwtB
-ZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIDAeBgNV
-BAMTF0FkZFRydXN0IFB1YmxpYyBDQSBSb290MIIBIjANBgkqhkiG9w0BAQEFAAOC
-AQ8AMIIBCgKCAQEA6Rowj4OIFMEg2Dybjxt+A3S72mnTRqX4jsIMEZBRpS9mVEBV
-6tsfSlbunyNu9DnLoblv8n75XYcmYZ4c+OLspoH4IcUkzBEMP9smcnrHAZcHF/nX
-GCwwfQ56HmIexkvA/X1id9NEHif2P0tEs7c42TkfYNVRknMDtABp4/MUTu7R3AnP
-dzRGULD4EfL+OHn3Bzn+UZKXC1sIXzSGAa2Il+tmzV7R/9x98oTaunet3IAIx6eH
-1lWfl2royBFkuucZKT8Rs3iQhCBSWxHveNCD9tVIkNAwHM+A+WD+eeSI8t0A65RF
-62WUaUC6wNW0uLp9BBGo6zEFlpROWCGOn9Bg/QIDAQABo4HRMIHOMB0GA1UdDgQW
-BBSBPjfYkrAfd59ctKtzquf2NGAv+jALBgNVHQ8EBAMCAQYwDwYDVR0TAQH/BAUw
-AwEB/zCBjgYDVR0jBIGGMIGDgBSBPjfYkrAfd59ctKtzquf2NGAv+qFopGYwZDEL
-MAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQLExRBZGRU
-cnVzdCBUVFAgTmV0d29yazEgMB4GA1UEAxMXQWRkVHJ1c3QgUHVibGljIENBIFJv
-b3SCAQEwDQYJKoZIhvcNAQEFBQADggEBAAP3FUr4JNojVhaTdt02KLmuG7jD8WS6
-IBh4lSknVwW8fCr0uVFV2ocC3g8WFzH4qnkuCRO7r7IgGRLlk/lL+YPoRNWyQSW/
-iHVv/xD8SlTQX/D67zZzfRs2RcYhbbQVuE7PnFylPVoAjgbjPGsye/Kf8Lb93/Ao
-GEjwxrzQvzSAlsJKsW2Ox5BF3i9nrEUEo3rcVZLJR2bYGozH7ZxOmuASu7VqTITh
-4SINhwBk/ox9Yjllpu9CtoAlEmEBqCQTcAARJl/6NVDFSMwGR+gn2HCNX2TmoUQm
-XiLsks3/QppEIW1cxeMiHV9HEufOX1362KqxMy3ZdvJOOjMMK7MtkAY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEHjCCAwagAwIBAgIBATANBgkqhkiG9w0BAQUFADBnMQswCQYDVQQGEwJTRTEU
-MBIGA1UEChMLQWRkVHJ1c3QgQUIxHTAbBgNVBAsTFEFkZFRydXN0IFRUUCBOZXR3
-b3JrMSMwIQYDVQQDExpBZGRUcnVzdCBRdWFsaWZpZWQgQ0EgUm9vdDAeFw0wMDA1
-MzAxMDQ0NTBaFw0yMDA1MzAxMDQ0NTBaMGcxCzAJBgNVBAYTAlNFMRQwEgYDVQQK
-EwtBZGRUcnVzdCBBQjEdMBsGA1UECxMUQWRkVHJ1c3QgVFRQIE5ldHdvcmsxIzAh
-BgNVBAMTGkFkZFRydXN0IFF1YWxpZmllZCBDQSBSb290MIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA5B6a/twJWoekn0e+EV+vhDTbYjx5eLfpMLXsDBwq
-xBb/4Oxx64r1EW7tTw2R0hIYLUkVAcKkIhPHEWT/IhKauY5cLwjPcWqzZwFZ8V1G
-87B4pfYOQnrjfxvM0PC3KP0q6p6zsLkEqv32x7SxuCqg+1jxGaBvcCV+PmlKfw8i
-2O+tCBGaKZnhqkRFmhJePp1tUvznoD1oL/BLcHwTOK28FSXx1s6rosAx1i+f4P8U
-WfyEk9mHfExUE+uf0S0R+Bg6Ot4l2ffTQO2kBhLEO+GRwVY18BTcZTYJbqukB8c1
-0cIDMzZbdSZtQvESa0NvS3GU+jQd7RNuyoB/mC9suWXY6QIDAQABo4HUMIHRMB0G
-A1UdDgQWBBQ5lYtii1zJ1IC6WA+XPxUIQ8yYpzALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zCBkQYDVR0jBIGJMIGGgBQ5lYtii1zJ1IC6WA+XPxUIQ8yYp6Fr
-pGkwZzELMAkGA1UEBhMCU0UxFDASBgNVBAoTC0FkZFRydXN0IEFCMR0wGwYDVQQL
-ExRBZGRUcnVzdCBUVFAgTmV0d29yazEjMCEGA1UEAxMaQWRkVHJ1c3QgUXVhbGlm
-aWVkIENBIFJvb3SCAQEwDQYJKoZIhvcNAQEFBQADggEBABmrder4i2VhlRO6aQTv
-hsoToMeqT2QbPxj2qC0sVY8FtzDqQmodwCVRLae/DLPt7wh/bDxGGuoYQ992zPlm
-hpwsaPXpF/gxsxjE1kh9I0xowX67ARRvxdlu3rsEQmr49lx95dr6h+sNNVJn0J6X
-dgWTP5XHAeZpVTh/EGGZyeNfpso+gmNIquIISD6q8rKFYqa0p9m9N5xotS1WfbC3
-P6CxB9bpT9zeRXEwMn8bLgn5v1Kh7sKAPgZcLlVAwRv1cEWw3F369nJad9Jjzc9Y
-iQBCYz95OdBEsIJuQRno3eDBiFrRHnGTHyQwdOUeqN48Jzd/g66ed8/wMLH/S5no
-xqE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDpDCCAoygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAxMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MTExOTIwNDMwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMTCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAKgv6KRpBgNHw+kqmP8ZonCaxlCyfqXfaE0bfA+2l2h9LaaLl+lk
-hsmj76CGv2BlnEtUiMJIxUo5vxTjWVXlGbR0yLQFOVwWpeKVBeASrlmLojNoWBym
-1BW32J/X3HGrfpq/m44zDyL9Hy7nBzbvYjnF3cu6JRQj3gzGPTzOggjmZj7aUTsW
-OqMFf6Dch9Wc/HKpoH145LcxVR5lu9RhsCFg7RAycsWSJR74kEoYeEfffjA3PlAb
-2xzTa5qGUwew76wGePiEmf4hjUyAtgyC9mZweRrTT6PP8c9GsEsPPt2IYriMqQko
-O3rHl+Ee5fSfwMCuJKDIodkP1nsmgmkyPacCAwEAAaNjMGEwDwYDVR0TAQH/BAUw
-AwEB/zAdBgNVHQ4EFgQUAK3Zo/Z59m50qX8zPYEX10zPM94wHwYDVR0jBBgwFoAU
-AK3Zo/Z59m50qX8zPYEX10zPM94wDgYDVR0PAQH/BAQDAgGGMA0GCSqGSIb3DQEB
-BQUAA4IBAQB8itEfGDeC4Liwo+1WlchiYZwFos3CYiZhzRAW18y0ZTTQEYqtqKkF
-Zu90821fnZmv9ov761KyBZiibyrFVL0lvV+uyIbqRizBs73B6UlwGBaXCBOMIOAb
-LjpHyx7kADCVW/RFo8AasAFOq73AI25jP4BKxQft3OJvx8Fi8eNy1gTIdGcL+oir
-oQHIb/AUr9KZzVGTfu0uOMe9zkZQPXLjeSWdm4grECDdpbgyn43gKd8hdIaC2y+C
-MMbHNYaz+ZZfRtsMRf3zUMNvxsNIrUam4SdHCh0Om7bCd39j8uB9Gr784N/Xx6ds
-sPmuujz9dLQR6FgNgLzTqIA6me11zEZ7
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFpDCCA4ygAwIBAgIBATANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTQW1lcmljYSBPbmxpbmUgSW5jLjE2MDQGA1UEAxMtQW1lcmljYSBP
-bmxpbmUgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAyMB4XDTAyMDUyODA2
-MDAwMFoXDTM3MDkyOTE0MDgwMFowYzELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0Ft
-ZXJpY2EgT25saW5lIEluYy4xNjA0BgNVBAMTLUFtZXJpY2EgT25saW5lIFJvb3Qg
-Q2VydGlmaWNhdGlvbiBBdXRob3JpdHkgMjCCAiIwDQYJKoZIhvcNAQEBBQADggIP
-ADCCAgoCggIBAMxBRR3pPU0Q9oyxQcngXssNt79Hc9PwVU3dxgz6sWYFas14tNwC
-206B89enfHG8dWOgXeMHDEjsJcQDIPT/DjsS/5uN4cbVG7RtIuOx238hZK+GvFci
-KtZHgVdEglZTvYYUAQv8f3SkWq7xuhG1m1hagLQ3eAkzfDJHA1zEpYNI9FdWboE2
-JxhP7JsowtS013wMPgwr38oE18aO6lhOqKSlGBxsRZijQdEt0sdtjRnxrXm3gT+9
-BoInLRBYBbV4Bbkv2wxrkJB+FFk4u5QkE+XRnRTf04JNRvCAOVIyD+OEsnpD8l7e
-Xz8d3eOyG6ChKiMDbi4BFYdcpnV1x5dhvt6G3NRI270qv0pV2uh9UPu0gBe4lL8B
-PeraunzgWGcXuVjgiIZGZ2ydEEdYMtA1fHkqkKJaEBEjNa0vzORKW6fIJ/KD3l67
-Xnfn6KVuY8INXWHQjNJsWiEOyiijzirplcdIz5ZvHZIlyMbGwcEMBawmxNJ10uEq
-Z8A9W6Wa6897GqidFEXlD6CaZd4vKL3Ob5Rmg0gp2OpljK+T2WSfVVcmv2/LNzGZ
-o2C7HK2JNDJiuEMhBnIMoVxtRsX6Kc8w3onccVvdtjc+31D1uAclJuW8tf48ArO3
-+L5DwYcRlJ4jbBeKuIonDFRH8KmzwICMoCfrHRnjB453cMor9H124HhnAgMBAAGj
-YzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFE1FwWg4u3OpaaEg5+31IqEj
-FNeeMB8GA1UdIwQYMBaAFE1FwWg4u3OpaaEg5+31IqEjFNeeMA4GA1UdDwEB/wQE
-AwIBhjANBgkqhkiG9w0BAQUFAAOCAgEAZ2sGuV9FOypLM7PmG2tZTiLMubekJcmn
-xPBUlgtk87FYT15R/LKXeydlwuXK5w0MJXti4/qftIe3RUavg6WXSIylvfEWK5t2
-LHo1YGwRgJfMqZJS5ivmae2p+DYtLHe/YUjRYwu5W1LtGLBDQiKmsXeu3mnFzccc
-obGlHBD7GL4acN3Bkku+KVqdPzW+5X1R+FXgJXUjhx5c3LqdsKyzadsXg8n33gy8
-CNyRnqjQ1xU3c6U1uPx+xURABsPr+CKAXEfOAuMRn0T//ZoyzH1kUQ7rVyZ2OuMe
-IjzCpjbdGe+n/BLzJsBZMYVMnNjP36TMzCmT/5RtdlwTCJfy7aULTd3oyWgOZtMA
-DjMSW7yV5TKQqLPGbIOtd+6Lfn6xqavT4fG2wLHqiMDn05DpKJKUe2h7lyoKZy2F
-AjgQ5ANh1NolNscIWC2hp1GvMApJ9aZphwctREZ2jirlmjvXGKL8nDgQzMY70rUX
-Om/9riW99XJZZLF0KjhfGEzfz3EEWjbUvy+ZnOjZurGV5gJLIaFb1cFPj65pbVPb
-AZO1XB4Y3WRayhgoPmMEEf0cjQAPuDffZ4qdZqkCapH/E8ovXYO8h5Ns3CRRFgQl
-Zvqz2cK6Kb6aSDiCmfS/O0oxGfm/jiEzFMpPVF/7zvuPcX/9XhmgD0uRuMRUvAaw
-RY8mkaKO/qk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdzCCAl+gAwIBAgIEAgAAuTANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJJ
-RTESMBAGA1UEChMJQmFsdGltb3JlMRMwEQYDVQQLEwpDeWJlclRydXN0MSIwIAYD
-VQQDExlCYWx0aW1vcmUgQ3liZXJUcnVzdCBSb290MB4XDTAwMDUxMjE4NDYwMFoX
-DTI1MDUxMjIzNTkwMFowWjELMAkGA1UEBhMCSUUxEjAQBgNVBAoTCUJhbHRpbW9y
-ZTETMBEGA1UECxMKQ3liZXJUcnVzdDEiMCAGA1UEAxMZQmFsdGltb3JlIEN5YmVy
-VHJ1c3QgUm9vdDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAKMEuyKr
-mD1X6CZymrV51Cni4eiVgLGw41uOKymaZN+hXe2wCQVt2yguzmKiYv60iNoS6zjr
-IZ3AQSsBUnuId9Mcj8e6uYi1agnnc+gRQKfRzMpijS3ljwumUNKoUMMo6vWrJYeK
-mpYcqWe4PwzV9/lSEy/CG9VwcPCPwBLKBsua4dnKM3p31vjsufFoREJIE9LAwqSu
-XmD+tqYF/LTdB1kC1FkYmGP1pWPgkAx9XbIGevOF6uvUA65ehD5f/xXtabz5OTZy
-dc93Uk3zyZAsuT3lySNTPx8kmCFcB5kpvcY67Oduhjprl3RjM71oGDHweI12v/ye
-jl0qhqdNkNwnGjkCAwEAAaNFMEMwHQYDVR0OBBYEFOWdWTCCR1jMrPoIVDaGezq1
-BE3wMBIGA1UdEwEB/wQIMAYBAf8CAQMwDgYDVR0PAQH/BAQDAgEGMA0GCSqGSIb3
-DQEBBQUAA4IBAQCFDF2O5G9RaEIFoN27TyclhAO992T9Ldcw46QQF+vaKSm2eT92
-9hkTI7gQCvlYpNRhcL0EYWoSihfVCr3FvDB81ukMJY2GQE/szKN+OMY3EU/t3Wgx
-jkzSswF07r51XgdIGn9w/xZchMB5hbgF/X++ZRGjD8ACtPhSNzkE1akxehi/oCr0
-Epn3o0WC4zxe9Z2etciefC7IpJ5OCBRLbf1wbWsaY71k5h+3zvDyny67G7fyUIhz
-ksLi4xaNmjICq44Y3ekQEe5+NauQrz4wlHrQMz2nZQ/1/I6eYs9HRCwBXbsdtTLS
-R9I4LtD+gdwyah617jzV/OeBHRnDJELqYzmp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEHTCCAwWgAwIBAgIQToEtioJl4AsC7j41AkblPTANBgkqhkiG9w0BAQUFADCB
-gTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxJzAlBgNV
-BAMTHkNPTU9ETyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEyMDEwMDAw
-MDBaFw0yOTEyMzEyMzU5NTlaMIGBMQswCQYDVQQGEwJHQjEbMBkGA1UECBMSR3Jl
-YXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHEwdTYWxmb3JkMRowGAYDVQQKExFDT01P
-RE8gQ0EgTGltaXRlZDEnMCUGA1UEAxMeQ09NT0RPIENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA0ECLi3LjkRv3
-UcEbVASY06m/weaKXTuH+7uIzg3jLz8GlvCiKVCZrts7oVewdFFxze1CkU1B/qnI
-2GqGd0S7WWaXUF601CxwRM/aN5VCaTwwxHGzUvAhTaHYujl8HJ6jJJ3ygxaYqhZ8
-Q5sVW7euNJH+1GImGEaaP+vB+fGQV+useg2L23IwambV4EajcNxo2f8ESIl33rXp
-+2dtQem8Ob0y2WIC8bGoPW43nOIv4tOiJovGuFVDiOEjPqXSJDlqR6sA1KGzqSX+
-DT+nHbrTUcELpNqsOO9VUCQFZUaTNE8tja3G1CEZ0o7KBWFxB3NH5YoZEr0ETc5O
-nKVIrLsm9wIDAQABo4GOMIGLMB0GA1UdDgQWBBQLWOWLxkwVN6RAqTCpIb5HNlpW
-/zAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zBJBgNVHR8EQjBAMD6g
-PKA6hjhodHRwOi8vY3JsLmNvbW9kb2NhLmNvbS9DT01PRE9DZXJ0aWZpY2F0aW9u
-QXV0aG9yaXR5LmNybDANBgkqhkiG9w0BAQUFAAOCAQEAPpiem/Yb6dc5t3iuHXIY
-SdOH5EOC6z/JqvWote9VfCFSZfnVDeFs9D6Mk3ORLgLETgdxb8CPOGEIqB6BCsAv
-IC9Bi5HcSEW88cbeunZrM8gALTFGTO3nnc+IlP8zwFboJIYmuNg4ON8qa90SzMc/
-RxdMosIGlgnW2/4/PEZB31jiVg88O8EckzXZOFKs7sjsLjBOlDW0JB9LeGna8gI4
-zJVSk/BwJVmcIGfE7vmLV2H0knZ9P4SNVbfo5azV8fUZVqZa+5Acr5Pr5RzUZ5dd
-BA6+C4OmF4O5MBKgxTMVBbkN+8cFduPYSo38NBejxiEovjBFMR7HeL5YYTisO+IB
-ZQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICiTCCAg+gAwIBAgIQH0evqmIAcFBUTAGem2OZKjAKBggqhkjOPQQDAzCBhTEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BxMHU2FsZm9yZDEaMBgGA1UEChMRQ09NT0RPIENBIExpbWl0ZWQxKzApBgNVBAMT
-IkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDgwMzA2MDAw
-MDAwWhcNMzgwMTE4MjM1OTU5WjCBhTELMAkGA1UEBhMCR0IxGzAZBgNVBAgTEkdy
-ZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UEBxMHU2FsZm9yZDEaMBgGA1UEChMRQ09N
-T0RPIENBIExpbWl0ZWQxKzApBgNVBAMTIkNPTU9ETyBFQ0MgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAAQDR3svdcmCFYX7deSR
-FtSrYpn1PlILBs5BAH+X4QokPB0BBO490o0JlwzgdeT6+3eKKvUDYEs2ixYjFq0J
-cfRK9ChQtP6IHG4/bC8vCVlbpVsLM5niwz2J+Wos77LTBumjQjBAMB0GA1UdDgQW
-BBR1cacZSBm8nZ3qQUfflMRId5nTeTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/
-BAUwAwEB/zAKBggqhkjOPQQDAwNoADBlAjEA7wNbeqy3eApyt4jf/7VGFAkK+qDm
-fQjGGoe9GKhzvSbKYAydzpmfz1wPMOG+FDHqAjAU9JM8SaczepBGR7NjfRObTrdv
-GDeAU/7dIOA1mjbRxwG55tzd8/8dLDoWV9mSOdY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBADANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEiMCAGA1UEAxMZQ2hhbWJlcnMg
-b2YgQ29tbWVyY2UgUm9vdDAeFw0wMzA5MzAxNjEzNDNaFw0zNzA5MzAxNjEzNDRa
-MH8xCzAJBgNVBAYTAkVVMScwJQYDVQQKEx5BQyBDYW1lcmZpcm1hIFNBIENJRiBB
-ODI3NDMyODcxIzAhBgNVBAsTGmh0dHA6Ly93d3cuY2hhbWJlcnNpZ24ub3JnMSIw
-IAYDVQQDExlDaGFtYmVycyBvZiBDb21tZXJjZSBSb290MIIBIDANBgkqhkiG9w0B
-AQEFAAOCAQ0AMIIBCAKCAQEAtzZV5aVdGDDg2olUkfzIx1L4L1DZ77F1c2VHfRtb
-unXF/KGIJPov7coISjlUxFF6tdpg6jg8gbLL8bvZkSM/SAFwdakFKq0fcfPJVD0d
-BmpAPrMMhe5cG3nCYsS4No41XQEMIwRHNaqbYE6gZj3LJgqcQKH0XZi/caulAGgq
-7YN6D6IUtdQis4CwPAxaUWktWBiP7Zme8a7ileb2R6jWDA+wWFjbw2Y3npuRVDM3
-0pQcakjJyfKl2qUMI/cjDpwyVV5xnIQFUZot/eZOKjRa3spAN2cMVCFVd9oKDMyX
-roDclDZK9D7ONhMeU+SsTjoF7Nuucpw4i9A5O4kKPnf+dQIBA6OCAUQwggFAMBIG
-A1UdEwEB/wQIMAYBAf8CAQwwPAYDVR0fBDUwMzAxoC+gLYYraHR0cDovL2NybC5j
-aGFtYmVyc2lnbi5vcmcvY2hhbWJlcnNyb290LmNybDAdBgNVHQ4EFgQU45T1sU3p
-26EpW1eLTXYGduHRooowDgYDVR0PAQH/BAQDAgEGMBEGCWCGSAGG+EIBAQQEAwIA
-BzAnBgNVHREEIDAegRxjaGFtYmVyc3Jvb3RAY2hhbWJlcnNpZ24ub3JnMCcGA1Ud
-EgQgMB6BHGNoYW1iZXJzcm9vdEBjaGFtYmVyc2lnbi5vcmcwWAYDVR0gBFEwTzBN
-BgsrBgEEAYGHLgoDATA+MDwGCCsGAQUFBwIBFjBodHRwOi8vY3BzLmNoYW1iZXJz
-aWduLm9yZy9jcHMvY2hhbWJlcnNyb290Lmh0bWwwDQYJKoZIhvcNAQEFBQADggEB
-AAxBl8IahsAifJ/7kPMa0QOx7xP5IV8EnNrJpY0nbJaHkb5BkAFyk+cefV/2icZd
-p0AJPaxJRUXcLo0waLIJuvvDL8y6C98/d3tGfToSJI6WjzwFCm/SlCgdbQzALogi
-1djPHRPH8EjX1wWnz8dHnjs8NMiAT9QUu/wNUPf6s+xCX6ndbcj0dc97wXImsQEc
-XCz9ek60AcUFV7nnPKoF2YjpB0ZBzu9Bga5Y34OirsrXdx/nADydb47kMgkdTXg0
-eDQ8lJsm7U9xxhl6vSAiSFr+S30Dt+dYvsYyTnQeaN2oaFuzPu5ifdmA6Ap1erfu
-tGWaIZDgqtCYvDi1czyL+Nw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIExTCCA62gAwIBAgIBADANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJFVTEn
-MCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgyNzQzMjg3MSMwIQYDVQQL
-ExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4GA1UEAxMXR2xvYmFsIENo
-YW1iZXJzaWduIFJvb3QwHhcNMDMwOTMwMTYxNDE4WhcNMzcwOTMwMTYxNDE4WjB9
-MQswCQYDVQQGEwJFVTEnMCUGA1UEChMeQUMgQ2FtZXJmaXJtYSBTQSBDSUYgQTgy
-NzQzMjg3MSMwIQYDVQQLExpodHRwOi8vd3d3LmNoYW1iZXJzaWduLm9yZzEgMB4G
-A1UEAxMXR2xvYmFsIENoYW1iZXJzaWduIFJvb3QwggEgMA0GCSqGSIb3DQEBAQUA
-A4IBDQAwggEIAoIBAQCicKLQn0KuWxfH2H3PFIP8T8mhtxOviteePgQKkotgVvq0
-Mi+ITaFgCPS3CU6gSS9J1tPfnZdan5QEcOw/Wdm3zGaLmFIoCQLfxS+EjXqXd7/s
-QJ0lcqu1PzKY+7e3/HKE5TWH+VX6ox8Oby4o3Wmg2UIQxvi1RMLQQ3/bvOSiPGpV
-eAp3qdjqGTK3L/5cPxvusZjsyq16aUXjlg9V9ubtdepl6DJWk0aJqCWKZQbua795
-B9Dxt6/tLE2Su8CoX6dnfQTyFQhwrJLWfQTSM/tMtgsL+xrJxI0DqX5c8lCrEqWh
-z0hQpe/SyBoT+rB/sYIcd2oPX9wLlY/vQ37mRQklAgEDo4IBUDCCAUwwEgYDVR0T
-AQH/BAgwBgEB/wIBDDA/BgNVHR8EODA2MDSgMqAwhi5odHRwOi8vY3JsLmNoYW1i
-ZXJzaWduLm9yZy9jaGFtYmVyc2lnbnJvb3QuY3JsMB0GA1UdDgQWBBRDnDafsJ4w
-TcbOX60Qq+UDpfqpFDAOBgNVHQ8BAf8EBAMCAQYwEQYJYIZIAYb4QgEBBAQDAgAH
-MCoGA1UdEQQjMCGBH2NoYW1iZXJzaWducm9vdEBjaGFtYmVyc2lnbi5vcmcwKgYD
-VR0SBCMwIYEfY2hhbWJlcnNpZ25yb290QGNoYW1iZXJzaWduLm9yZzBbBgNVHSAE
-VDBSMFAGCysGAQQBgYcuCgEBMEEwPwYIKwYBBQUHAgEWM2h0dHA6Ly9jcHMuY2hh
-bWJlcnNpZ24ub3JnL2Nwcy9jaGFtYmVyc2lnbnJvb3QuaHRtbDANBgkqhkiG9w0B
-AQUFAAOCAQEAPDtwkfkEVCeR4e3t/mh/YV3lQWVPMvEYBZRqHN4fcNs+ezICNLUM
-bKGKfKX0j//U2K0X1S0E0T9YgOKBWYi+wONGkyT+kL0mojAt6JcmVzWJdJYY9hXi
-ryQZVgICsroPFOrGimbBhkVVi76SvpykBMdJPJ7oKXqJ1/6v/2j1pReQvayZzKWG
-VwlnRtvWFsJG8eSpUPWP0ZIV018+xgBJOm5YstHRJw0lyDL4IBHNfTIzSJRUTN3c
-ecQwn+uOuFW114hcxWokPbLTBQNRxgfvzBRydD1ucs4YKIxKoHflCStFREest2d/
-AYoFWpO+ocH/+OcOZ6RHSXZddZAa9SaP8A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDkjCCAnqgAwIBAgIRAIW9S/PY2uNp9pTXX8OlRCMwDQYJKoZIhvcNAQEFBQAw
-PTELMAkGA1UEBhMCRlIxETAPBgNVBAoTCENlcnRwbHVzMRswGQYDVQQDExJDbGFz
-cyAyIFByaW1hcnkgQ0EwHhcNOTkwNzA3MTcwNTAwWhcNMTkwNzA2MjM1OTU5WjA9
-MQswCQYDVQQGEwJGUjERMA8GA1UEChMIQ2VydHBsdXMxGzAZBgNVBAMTEkNsYXNz
-IDIgUHJpbWFyeSBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANxQ
-ltAS+DXSCHh6tlJw/W/uz7kRy1134ezpfgSN1sxvc0NXYKwzCkTsA18cgCSR5aiR
-VhKC9+Ar9NuuYS6JEI1rbLqzAr3VNsVINyPi8Fo3UjMXEuLRYE2+L0ER4/YXJQyL
-kcAbmXuZVg2v7tK8R1fjeUl7NIknJITesezpWE7+Tt9avkGtrAjFGA7v0lPubNCd
-EgETjdyAYveVqUSISnFOYFWe2yMZeVYHDD9jC1yw4r5+FfyUM1hBOHTE4Y+L3yas
-H7WLO7dDWWuwJKZtkIvEcupdM5i3y95ee++U8Rs+yskhwcWYAqqi9lt3m/V+llU0
-HGdpwPFC40es/CgcZlUCAwEAAaOBjDCBiTAPBgNVHRMECDAGAQH/AgEKMAsGA1Ud
-DwQEAwIBBjAdBgNVHQ4EFgQU43Mt38sOKAze3bOkynm4jrvoMIkwEQYJYIZIAYb4
-QgEBBAQDAgEGMDcGA1UdHwQwMC4wLKAqoCiGJmh0dHA6Ly93d3cuY2VydHBsdXMu
-Y29tL0NSTC9jbGFzczIuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQCnVM+IRBnL39R/
-AN9WM2K191EBkOvDP9GIROkkXe/nFL0gt5o8AP5tn9uQ3Nf0YtaLcF3n5QRIqWh8
-yfFC82x/xXp8HVGIutIKPidd3i1RTtMTZGnkLuPT55sJmabglZvOGtd/vjzOUrMR
-FcEPF80Du5wlFbqidon8BvEY0JNLDnyCt6X09l/+7UCmnYR0ObncHoUW2ikbhiMA
-ybuJfm6AiB4vFLQDJKgybwOaRywwvlbGp0ICcBvqQNi6BQNwB6SW//1IMwrh3KWB
-kJtN3X3n57LNXMhqlfil9o3EXXgIvnsG1knPGTZQIy4I5p4FTUcY1Rbpsda2ENW7
-l7+ijrRU
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDDDCCAfSgAwIBAgIDAQAgMA0GCSqGSIb3DQEBBQUAMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTAeFw0wMjA2MTExMDQ2MzlaFw0yNzA2MTExMDQ2MzlaMD4xCzAJBgNVBAYTAlBM
-MRswGQYDVQQKExJVbml6ZXRvIFNwLiB6IG8uby4xEjAQBgNVBAMTCUNlcnR1bSBD
-QTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM6xwS7TT3zNJc4YPk/E
-jG+AanPIW1H4m9LcuwBcsaD8dQPugfCI7iNS6eYVM42sLQnFdvkrOYCJ5JdLkKWo
-ePhzQ3ukYbDYWMzhbGZ+nPMJXlVjhNWo7/OxLjBos8Q82KxujZlakE403Daaj4GI
-ULdtlkIJ89eVgw1BS7Bqa/j8D35in2fE7SZfECYPCE/wpFcozo+47UX2bu4lXapu
-Ob7kky/ZR6By6/qmW6/KUz/iDsaWVhFu9+lmqSbYf5VT7QqFiLpPKaVCjF62/IUg
-AKpoC6EahQGcxEZjgoi2IrHu/qpGWX7PNSzVttpd90gzFFS269lvzs2I1qsb2pY7
-HVkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEA
-uI3O7+cUus/usESSbLQ5PqKEbq24IXfS1HeCh+YgQYHu4vgRt2PRFze+GXYkHAQa
-TOs9qmdvLdTN/mUxcMUbpgIKumB7bVjCmkn+YzILa+M6wKyrO7Do0wlRjBCDxjTg
-xSvgGrZgFCdsMneMvLJymM/NzD+5yCRCFNZX/OYmQ6kd5YCQzgNUKD73P9P4Te1q
-CjqTE5s7FCMTY5w/0YcneeVMUeMBrYVdGjux1XMQpNPyvG5k9VpWkKjHDkx0Dy5x
-O/fIR/RpbxXyEV6DHpx8Uq79AtoSqFlnGNu8cN2bsWntgM6JQEhqDjXKKWYVIZQs
-6GAqm4VKQPNriiTsBhYscw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMjCCAxqgAwIBAgIBATANBgkqhkiG9w0BAQUFADB7MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEhMB8GA1UEAwwYQUFBIENlcnRpZmlj
-YXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVowezEL
-MAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4GA1UE
-BwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxITAfBgNVBAMM
-GEFBQSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEBBQADggEP
-ADCCAQoCggEBAL5AnfRu4ep2hxxNRUSOvkbIgwadwSr+GB+O5AL686tdUIoWMQua
-BtDFcCLNSS1UY8y2bmhGC1Pqy0wkwLxyTurxFa70VJoSCsN6sjNg4tqJVfMiWPPe
-3M/vg4aijJRPn2jymJBGhCfHdr/jzDUsi14HZGWCwEiwqJH5YZ92IFCokcdmtet4
-YgNW8IoaE+oxox6gmf049vYnMlhvB/VruPsUK6+3qszWY19zjNoFmag4qMsXeDZR
-rOme9Hg6jc8P2ULimAyrL58OAd7vn5lJ8S3frHRNG5i1R8XlKdH5kBjHYpy+g8cm
-ez6KJcfA3Z3mNWgQIJ2P2N7Sw4ScDV7oL8kCAwEAAaOBwDCBvTAdBgNVHQ4EFgQU
-oBEKIz6W8Qfs4q8p74Klf9AwpLQwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQF
-MAMBAf8wewYDVR0fBHQwcjA4oDagNIYyaHR0cDovL2NybC5jb21vZG9jYS5jb20v
-QUFBQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmwwNqA0oDKGMGh0dHA6Ly9jcmwuY29t
-b2RvLm5ldC9BQUFDZXJ0aWZpY2F0ZVNlcnZpY2VzLmNybDANBgkqhkiG9w0BAQUF
-AAOCAQEACFb8AvCb6P+k+tZ7xkSAzk/ExfYAWMymtrwUSWgEdujm7l3sAg9g1o1Q
-GE8mTgHj5rCl7r+8dFRBv/38ErjHT1r0iWAFf2C3BUrz9vHCv8S5dIa2LX1rzNLz
-Rt0vxuBqw8M0Ayx9lt1awg6nCpnBBYurDC/zXDrPbDdVCYfeU0BsWO/8tqtlbgT2
-G9w84FoVxp7Z8VlIMCFlA2zs6SFz7JsDoeA3raAVGI/6ugLOpyypEBMs1OUIJqsi
-l2D4kF501KKaU73yqWjgom7C12yxow+ev+to51byrvLjKzg6CYG1a4XXvi3tPxq3
-smPi9WIsgtRqAEFQ8TmDn5XpNpaYbg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPzCCAyegAwIBAgIBATANBgkqhkiG9w0BAQUFADB+MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDEkMCIGA1UEAwwbU2VjdXJlIENlcnRp
-ZmljYXRlIFNlcnZpY2VzMB4XDTA0MDEwMTAwMDAwMFoXDTI4MTIzMTIzNTk1OVow
-fjELMAkGA1UEBhMCR0IxGzAZBgNVBAgMEkdyZWF0ZXIgTWFuY2hlc3RlcjEQMA4G
-A1UEBwwHU2FsZm9yZDEaMBgGA1UECgwRQ29tb2RvIENBIExpbWl0ZWQxJDAiBgNV
-BAMMG1NlY3VyZSBDZXJ0aWZpY2F0ZSBTZXJ2aWNlczCCASIwDQYJKoZIhvcNAQEB
-BQADggEPADCCAQoCggEBAMBxM4KK0HDrc4eCQNUd5MvJDkKQ+d40uaG6EfQlhfPM
-cm3ye5drswfxdySRXyWP9nQ95IDC+DwN879A6vfIUtFyb+/Iq0G4bi4XKpVpDM3S
-HpR7LZQdqnXXs5jLrLxkU0C8j6ysNstcrbvd4JQX7NFc0L/vpZXJkMWwrPsbQ996
-CF23uPJAGysnnlDOXmWCiIxe004MeuoIkbY2qitC++rCoznl2yY4rYsK7hljxxwk
-3wN42ubqwUcaCwtGCd0C/N7Lh1/XMGNooa7cMqG6vv5Eq2i2pRcV/b3Vp6ea5EQz
-6YiO/O1R65NxTq0B50SOqy3LqP4BSUjwwN3HaNiS/j0CAwEAAaOBxzCBxDAdBgNV
-HQ4EFgQUPNiTiMLAggnMAZkGkyDpnnAJY08wDgYDVR0PAQH/BAQDAgEGMA8GA1Ud
-EwEB/wQFMAMBAf8wgYEGA1UdHwR6MHgwO6A5oDeGNWh0dHA6Ly9jcmwuY29tb2Rv
-Y2EuY29tL1NlY3VyZUNlcnRpZmljYXRlU2VydmljZXMuY3JsMDmgN6A1hjNodHRw
-Oi8vY3JsLmNvbW9kby5uZXQvU2VjdXJlQ2VydGlmaWNhdGVTZXJ2aWNlcy5jcmww
-DQYJKoZIhvcNAQEFBQADggEBAIcBbSMdflsXfcFhMs+P5/OKlFlm4J4oqF7Tt/Q0
-5qo5spcWxYJvMqTpjOev/e/C6LlLqqP05tqNZSH7uoDrJiiFGv45jN5bBAS0VPmj
-Z55B+glSzAVIqMk/IQQezkhr/IXownuvf7fM+F86/TXGDe+X3EyrEeFryzHRbPtI
-gKvcnDe4IRRLDXE97IMzbtFuMhbsmMcWi1mmNKsFVy2T96oTy9IT4rcuO81rUBcJ
-aD61JlfutuC23bkpgHl9j6PwpCikFcSF9CfUa7/lXORlAnZUtOM3ZiTTGWHIUhDl
-izeauan5Hb/qmZJhlv8BzaFfDbxxvA6sCx1HRR3B7Hzs/Sk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEQzCCAyugAwIBAgIBATANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJHQjEb
-MBkGA1UECAwSR3JlYXRlciBNYW5jaGVzdGVyMRAwDgYDVQQHDAdTYWxmb3JkMRow
-GAYDVQQKDBFDb21vZG8gQ0EgTGltaXRlZDElMCMGA1UEAwwcVHJ1c3RlZCBDZXJ0
-aWZpY2F0ZSBTZXJ2aWNlczAeFw0wNDAxMDEwMDAwMDBaFw0yODEyMzEyMzU5NTla
-MH8xCzAJBgNVBAYTAkdCMRswGQYDVQQIDBJHcmVhdGVyIE1hbmNoZXN0ZXIxEDAO
-BgNVBAcMB1NhbGZvcmQxGjAYBgNVBAoMEUNvbW9kbyBDQSBMaW1pdGVkMSUwIwYD
-VQQDDBxUcnVzdGVkIENlcnRpZmljYXRlIFNlcnZpY2VzMIIBIjANBgkqhkiG9w0B
-AQEFAAOCAQ8AMIIBCgKCAQEA33FvNlhTWvI2VFeAxHQIIO0Yfyod5jWaHiWsnOWW
-fnJSoBVC21ndZHoa0Lh73TkVvFVIxO06AOoxEbrycXQaZ7jPM8yoMa+j49d/vzMt
-TGo87IvDktJTdyR0nAducPy9C1t2ul/y/9c3S0pgePfw+spwtOpZqqPOSC+pw7IL
-fhdyFgymBwwbOM/JYrc/oJOlh0Hyt3BAd9i+FHzjqMB6juljatEPmsbS9Is6FARW
-1O24zG71++IsWL1/T2sr92AkWCTOJu80kTrV44HQsvAEAtdbtz6SrGsSivnkBbA7
-kUlcsutT6vifR4buv5XAwAaf0lteERv0xwQ1KdJVXOTt6wIDAQABo4HJMIHGMB0G
-A1UdDgQWBBTFe1i97doladL3WRaoszLAeydb9DAOBgNVHQ8BAf8EBAMCAQYwDwYD
-VR0TAQH/BAUwAwEB/zCBgwYDVR0fBHwwejA8oDqgOIY2aHR0cDovL2NybC5jb21v
-ZG9jYS5jb20vVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMuY3JsMDqgOKA2hjRo
-dHRwOi8vY3JsLmNvbW9kby5uZXQvVHJ1c3RlZENlcnRpZmljYXRlU2VydmljZXMu
-Y3JsMA0GCSqGSIb3DQEBBQUAA4IBAQDIk4E7ibSvuIQSTI3S8NtwuleGFTQQuS9/
-HrCoiWChisJ3DFBKmwCL2Iv0QeLQg4pKHBQGsKNoBXAxMKdTmw7pSqBYaWcOrp32
-pSxBvzwGa+RZzG0Q8ZZvH9/0BAKkn0U+yNj6NkZEUD+Cl5EfKNsYEYwq5GWDVxIS
-jBc/lDb+XbDABHcTuPQV1T84zJQ6VdCsmPW6AF/ghhmBeC8owH7TzEIK9a5QoNE+
-xqFx7D+gIIxmOom0jtTYsU0lR+4viMi14QVFwL4Ucd56/Y57fU0IlqUSc/Atyjcn
-dBInTMu2l+nZrghtWjlA3QVHdWpaIbOjGM9O9y5Xt5hwXsjEeLBi
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIECTCCAvGgAwIBAgIQDV6ZCtadt3js2AdWO4YV2TANBgkqhkiG9w0BAQUFADBb
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3Qx
-ETAPBgNVBAsTCERTVCBBQ0VTMRcwFQYDVQQDEw5EU1QgQUNFUyBDQSBYNjAeFw0w
-MzExMjAyMTE5NThaFw0xNzExMjAyMTE5NThaMFsxCzAJBgNVBAYTAlVTMSAwHgYD
-VQQKExdEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdDERMA8GA1UECxMIRFNUIEFDRVMx
-FzAVBgNVBAMTDkRTVCBBQ0VTIENBIFg2MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEAuT31LMmU3HWKlV1j6IR3dma5WZFcRt2SPp/5DgO0PWGSvSMmtWPu
-ktKe1jzIDZBfZIGxqAgNTNj50wUoUrQBJcWVHAx+PhCEdc/BGZFjz+iokYi5Q1K7
-gLFViYsx+tC3dr5BPTCapCIlF3PoHuLTrCq9Wzgh1SpL11V94zpVvddtawJXa+ZH
-fAjIgrrep4c9oW24MFbCswKBXy314powGCi4ZtPLAZZv6opFVdbgnf9nKxcCpk4a
-ahELfrd755jWjHZvwTvbUJN+5dCOHze4vbrGn2zpfDPyMjwmR/onJALJfh1biEIT
-ajV8fTXpLmaRcpPVMibEdPVTo7NdmvYJywIDAQABo4HIMIHFMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgHGMB8GA1UdEQQYMBaBFHBraS1vcHNAdHJ1c3Rk
-c3QuY29tMGIGA1UdIARbMFkwVwYKYIZIAWUDAgEBATBJMEcGCCsGAQUFBwIBFjto
-dHRwOi8vd3d3LnRydXN0ZHN0LmNvbS9jZXJ0aWZpY2F0ZXMvcG9saWN5L0FDRVMt
-aW5kZXguaHRtbDAdBgNVHQ4EFgQUCXIGThhDD+XWzMNqizF7eI+og7gwDQYJKoZI
-hvcNAQEFBQADggEBAKPYjtay284F5zLNAdMEA+V25FYrnJmQ6AgwbN99Pe7lv7Uk
-QIRJ4dEorsTCOlMwiPH1d25Ryvr/ma8kXxug/fKshMrfqfBfBC6tFr8hlxCBPeP/
-h40y3JTlR4peahPJlJU90u7INJXQgNStMgiAVDzgvVJT11J8smk/f3rPanTK+gQq
-nExaBqXpIK1FZg9p8d2/6eMyi/rgwYZNcjwu2JN4Cir42NInPRmJX1p7ijvMDNpR
-rscL9yuwNwXsvFcj4jjSm2jzVhKIT0J8uDHEtdvkyCE06UgRNe76x5JXxZ805Mf2
-9w4LTJxoeHtxMcfrHuBnQfO3oKfN5XozNmr6mis=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDSjCCAjKgAwIBAgIQRK+wgNajJ7qJMDmGLvhAazANBgkqhkiG9w0BAQUFADA/
-MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT
-DkRTVCBSb290IENBIFgzMB4XDTAwMDkzMDIxMTIxOVoXDTIxMDkzMDE0MDExNVow
-PzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMRcwFQYDVQQD
-Ew5EU1QgUm9vdCBDQSBYMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEB
-AN+v6ZdQCINXtMxiZfaQguzH0yxrMMpb7NnDfcdAwRgUi+DoM3ZJKuM/IUmTrE4O
-rz5Iy2Xu/NMhD2XSKtkyj4zl93ewEnu1lcCJo6m67XMuegwGMoOifooUMM0RoOEq
-OLl5CjH9UL2AZd+3UWODyOKIYepLYYHsUmu5ouJLGiifSKOeDNoJjj4XLh7dIN9b
-xiqKqy69cK3FCxolkHRyxXtqqzTWMIn/5WgTe1QLyNau7Fqckh49ZLOMxt+/yUFw
-7BZy1SbsOFU5Q9D8/RhcQPGX69Wam40dutolucbY38EVAjqr2m7xPi71XAicPNaD
-aeQQmxkqtilX4+U9m5/wAl0CAwEAAaNCMEAwDwYDVR0TAQH/BAUwAwEB/zAOBgNV
-HQ8BAf8EBAMCAQYwHQYDVR0OBBYEFMSnsaR7LHH62+FLkHX/xBVghYkQMA0GCSqG
-SIb3DQEBBQUAA4IBAQCjGiybFwBcqR7uKGY3Or+Dxz9LwwmglSBd49lZRNI+DT69
-ikugdB/OEIKcdBodfpga3csTS7MgROSR6cz8faXbauX+5v3gTt23ADq1cEmv8uXr
-AvHRAosZy5Q6XkjEGB5YGV8eAlrwDPGxrancWYaLbumR9YbK+rlmM6pZW87ipxZz
-R8srzJmwN0jP41ZL9c8PDHIyh8bwRLtTcm1D9SZImlJnt1ir/md2cXjbDaJWFBM5
-JDGFoqgCWjBH4d1QB7wCCZAA62RjYJsWvIjJEubSfZGL+T0yjWW06XyxV3bqxbYo
-Ob8VZRzI9neWagqNdwvYkQsEjgfbKbYK7p2CNTUQ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDtzCCAp+gAwIBAgIQDOfg5RfYRv6P5WD8G/AwOTANBgkqhkiG9w0BAQUFADBl
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJv
-b3QgQ0EwHhcNMDYxMTEwMDAwMDAwWhcNMzExMTEwMDAwMDAwWjBlMQswCQYDVQQG
-EwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3d3cuZGlnaWNl
-cnQuY29tMSQwIgYDVQQDExtEaWdpQ2VydCBBc3N1cmVkIElEIFJvb3QgQ0EwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCtDhXO5EOAXLGH87dg+XESpa7c
-JpSIqvTO9SA5KFhgDPiA2qkVlTJhPLWxKISKityfCgyDF3qPkKyK53lTXDGEKvYP
-mDI2dsze3Tyoou9q+yHyUmHfnyDXH+Kx2f4YZNISW1/5WBg1vEfNoTb5a3/UsDg+
-wRvDjDPZ2C8Y/igPs6eD1sNuRMBhNZYW/lmci3Zt1/GiSw0r/wty2p5g0I6QNcZ4
-VYcgoc/lbQrISXwxmDNsIumH0DJaoroTghHtORedmTpyoeb6pNnVFzF1roV9Iq4/
-AUaG9ih5yLHa5FcXxH4cDrC0kqZWs72yl+2qp/C3xag/lRbQ/6GW6whfGHdPAgMB
-AAGjYzBhMA4GA1UdDwEB/wQEAwIBhjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQW
-BBRF66Kv9JLLgjEtUYunpyGd823IDzAfBgNVHSMEGDAWgBRF66Kv9JLLgjEtUYun
-pyGd823IDzANBgkqhkiG9w0BAQUFAAOCAQEAog683+Lt8ONyc3pklL/3cmbYMuRC
-dWKuh+vy1dneVrOfzM4UKLkNl2BcEkxY5NM9g0lFWJc1aRqoR+pWxnmrEthngYTf
-fwk8lOa4JiwgvT2zKIn3X/8i4peEH+ll74fg38FnSbNd67IJKusm7Xi+fT8r87cm
-NW1fiQG2SVufAQWbqz0lwcy2f8Lxb4bG+mRo64EtlOtCt/qMHt1i8b5QZ7dsvfPx
-H2sMNgcWfzd8qVttevESRmCD1ycEvkvOl77DZypoEd+A5wwzZr8TDRRu838fYxAe
-+o0bJW1sj6W3YQGx0qMmoRBxna3iw/nDmVG3KwcIzi7mULKn+gpFL6Lw8g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD
-QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT
-MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j
-b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB
-CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97
-nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt
-43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P
-T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4
-gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO
-BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR
-TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw
-DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr
-hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg
-06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF
-PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls
-YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk
-CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDxTCCAq2gAwIBAgIQAqxcJmoLQJuPC3nyrkYldzANBgkqhkiG9w0BAQUFADBs
-MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
-d3cuZGlnaWNlcnQuY29tMSswKQYDVQQDEyJEaWdpQ2VydCBIaWdoIEFzc3VyYW5j
-ZSBFViBSb290IENBMB4XDTA2MTExMDAwMDAwMFoXDTMxMTExMDAwMDAwMFowbDEL
-MAkGA1UEBhMCVVMxFTATBgNVBAoTDERpZ2lDZXJ0IEluYzEZMBcGA1UECxMQd3d3
-LmRpZ2ljZXJ0LmNvbTErMCkGA1UEAxMiRGlnaUNlcnQgSGlnaCBBc3N1cmFuY2Ug
-RVYgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMbM5XPm
-+9S75S0tMqbf5YE/yc0lSbZxKsPVlDRnogocsF9ppkCxxLeyj9CYpKlBWTrT3JTW
-PNt0OKRKzE0lgvdKpVMSOO7zSW1xkX5jtqumX8OkhPhPYlG++MXs2ziS4wblCJEM
-xChBVfvLWokVfnHoNb9Ncgk9vjo4UFt3MRuNs8ckRZqnrG0AFFoEt7oT61EKmEFB
-Ik5lYYeBQVCmeVyJ3hlKV9Uu5l0cUyx+mM0aBhakaHPQNAQTXKFx01p8VdteZOE3
-hzBWBOURtCmAEvF5OYiiAhF8J2a3iLd48soKqDirCmTCv2ZdlYTBoSUeh10aUAsg
-EsxBu24LUTi4S8sCAwEAAaNjMGEwDgYDVR0PAQH/BAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFLE+w2kD+L9HAdSYJhoIAu9jZCvDMB8GA1UdIwQYMBaA
-FLE+w2kD+L9HAdSYJhoIAu9jZCvDMA0GCSqGSIb3DQEBBQUAA4IBAQAcGgaX3Nec
-nzyIZgYIVyHbIUf4KmeqvxgydkAQV8GK83rZEWWONfqe/EW1ntlMMUu4kehDLI6z
-eM7b41N5cdblIZQB2lWHmiRk9opmzN6cN82oNLFpmyPInngiK3BD41VHMWEZ71jF
-hS9OMPagMRYjyOfiZRYzy78aG6A9+MpeizGLYAiJLQwGXFK3xPkKmNEVX58Svnw2
-Yzi9RKR/5CYrCsSXaQ3pjOLAEFe4yHYSkVXySGnYvCoCWw9E1CAx2/S6cCZdkGCe
-vEsXCS+0yx5DaMkHJ8HSXPfqIbloEpw8nL+e/IBcm2PN7EeqJSdnoDfzAIJ9VNep
-+OkuE6N36B9K
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFijCCA3KgAwIBAgIQDHbanJEMTiye/hXQWJM8TDANBgkqhkiG9w0BAQUFADBf
-MQswCQYDVQQGEwJOTDESMBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdp
-Tm90YXIgUm9vdCBDQTEgMB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmww
-HhcNMDcwNTE2MTcxOTM2WhcNMjUwMzMxMTgxOTIxWjBfMQswCQYDVQQGEwJOTDES
-MBAGA1UEChMJRGlnaU5vdGFyMRowGAYDVQQDExFEaWdpTm90YXIgUm9vdCBDQTEg
-MB4GCSqGSIb3DQEJARYRaW5mb0BkaWdpbm90YXIubmwwggIiMA0GCSqGSIb3DQEB
-AQUAA4ICDwAwggIKAoICAQCssFjBAL3YIQgLK5r+blYwBZ8bd5AQQVzDDYcRd46B
-8cp86Yxq7Th0Nbva3/m7wAk3tJZzgX0zGpg595NvlX89ubF1h7pRSOiLcD6VBMXY
-tsMW2YiwsYcdcNqGtA8Ui3rPENF0NqISe3eGSnnme98CEWilToauNFibJBN4ViIl
-HgGLS1Fx+4LMWZZpiFpoU8W5DQI3y0u8ZkqQfioLBQftFl9VkHXYRskbg+IIvvEj
-zJkd1ioPgyAVWCeCLvriIsJJsbkBgWqdbZ1Ad2h2TiEqbYRAhU52mXyC8/O3AlnU
-JgEbjt+tUwbRrhjd4rI6y9eIOI6sWym5GdOY+RgDz0iChmYLG2kPyes4iHomGgVM
-ktck1JbyrFIto0fVUvY//s6EBnCmqj6i8rZWNBhXouSBbefK8GrTx5FrAoNBfBXv
-a5pkXuPQPOWx63tdhvvL5ndJzaNl3Pe5nLjkC1+Tz8wwGjIczhxjlaX56uF0i57p
-K6kwe6AYHw4YC+VbqdPRbB4HZ4+RS6mKvNJmqpMBiLKR+jFc1abBUggJzQpjotMi
-puih2TkGl/VujQKQjBR7P4DNG5y6xFhyI6+2Vp/GekIzKQc/gsnmHwUNzUwoNovT
-yD4cxojvXu6JZOkd69qJfjKmadHdzIif0dDJZiHcBmfFlHqabWJMfczgZICynkeO
-owIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIBBjAdBgNV
-HQ4EFgQUiGi/4I41xDs4a2L3KDuEgcgM100wDQYJKoZIhvcNAQEFBQADggIBADsC
-jcs8MOhuoK3yc7NfniUTBAXT9uOLuwt5zlPe5JbF0a9zvNXD0EBVfEB/zRtfCdXy
-fJ9oHbtdzno5wozWmHvFg1Wo1X1AyuAe94leY12hE8JdiraKfADzI8PthV9xdvBo
-Y6pFITlIYXg23PFDk9Qlx/KAZeFTAnVR/Ho67zerhChXDNjU1JlWbOOi/lmEtDHo
-M/hklJRRl6s5xUvt2t2AC298KQ3EjopyDedTFLJgQT2EkTFoPSdE2+Xe9PpjRchM
-Ppj1P0G6Tss3DbpmmPHdy59c91Q2gmssvBNhl0L4eLvMyKKfyvBovWsdst+Nbwed
-2o5nx0ceyrm/KkKRt2NTZvFCo+H0Wk1Ya7XkpDOtXHAd3ODy63MUkZoDweoAZbwH
-/M8SESIsrqC9OuCiKthZ6SnTGDWkrBFfGbW1G/8iSlzGeuQX7yCpp/Q/rYqnmgQl
-nQ7KN+ZQ/YxCKQSa7LnPS3K94gg2ryMvYuXKAdNw23yCIywWMQzGNgeQerEfZ1jE
-O1hZibCMjFCz2IbLaKPECudpSyDOwR5WS5WpI2jYMNjD67BVUc3l/Su49bsRn1NU
-9jQZjHkJNsphFyUXC4KYcwx3dMPVDceoEkzHp1RxRy4sGn3J4ys7SN4nhKdjNrN9
-j6BkOSQNPXuHr2ZcdBtLc7LljPCGmbjlxd+Ewbfr
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENnAVljANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMTAeFw05ODEyMTAxODEwMjNaFw0xODEyMTAxODQwMjNaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUxMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQCg
-bIGpzzQeJN3+hijM3oMv+V7UQtLodGBmE5gGHKlREmlvMVW5SXIACH7TpWJENySZ
-j9mDSI+ZbZUTu0M7LklOiDfBu1h//uG9+LthzfNHwJmm8fOR6Hh8AMthyUQncWlV
-Sn5JTe2io74CTADKAqjuAQIxZA9SLRN0dja1erQtcQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTExDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMTAxODEw
-MjNagQ8yMDE4MTIxMDE4MTAyM1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFGp5
-fpFpRhgTCgJ3pVlbYJglDqL4MB0GA1UdDgQWBBRqeX6RaUYYEwoCd6VZW2CYJQ6i
-+DAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBACIS2Hod3IEGtgllsofIH160L+nEHvI8wbsEkBFKg05+k7lN
-QseSJqBcNJo4cvj9axY+IO6CizEqkzaFI4iKPANo08kJD038bKTaKHKTDomAsH3+
-gG9lbRgzl4vCa4nuYD3Im+9/KzJic5PLPON74nZ4RbyhkwS7hp86W0N6w4pl
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAACfAAAAAIAAAABMA0GCSqGSIb3DQEBBQUAMIGpMQsw
-CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
-dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
-CxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDExITAfBgkqhkiG9w0B
-CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODEyMDExODE4NTVaFw0wODExMjgx
-ODE4NTVaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
-U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
-IENvLjERMA8GA1UECxMIRFNUQ0EgWDExFjAUBgNVBAMTDURTVCBSb290Q0EgWDEx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBANLGJrbnpT3BxGjVUG9TxW9JEwm4ryxIjRRqoxdf
-WvnTLnUv2Chi0ZMv/E3Uq4flCMeZ55I/db3rJbQVwZsZPdJEjdd0IG03Ao9pk1uK
-xBmd9LIO/BZsubEFkoPRhSxglD5FVaDZqwgh5mDoO3TymVBRaNADLbGAvqPYUrBE
-zUNKcI5YhZXhTizWLUFv1oTnyJhEykfbLCSlaSbPa7gnYsP0yXqSI+0TZ4KuRS5F
-5X5yP4WdlGIQ5jyRoa13AOAV7POEgHJ6jm5gl8ckWRA0g1vhpaRptlc1HHhZxtMv
-OnNn7pTKBBMFYgZwI7P0fO5F2WQLW0mqpEPOJsREEmy43XkCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAojeyP2n714Z5VEkxlTMr89EJFEliYIalsBHiUMIdBlc+Legz
-ZL6bqq1fG03UmZWii5rJYnK1aerZWKs17RWiQ9a2vAd5ZWRzfdd5ynvVWlHG4VME
-lo04z6MXrDlxawHDi1M8Y+nuecDkvpIyZHqzH5eUYr3qsiAVlfuX8ngvYzZAOONG
-Dx3drJXK50uQe7FLqdTF65raqtWjlBRGjS0f8zrWkzr2Pnn86Oawde3uPclwx12q
-gUtGJRzHbBXjlU4PqjI3lAoXJJIThFjSY28r9+ZbYgsTF7ANUkz+/m9c4pFuHf2k
-Ytdo+o56T9II2pPc8JIRetDccpMMc5NihWjQ9A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIENm7TzjANBgkqhkiG9w0BAQUFADBGMQswCQYDVQQGEwJV
-UzEkMCIGA1UEChMbRGlnaXRhbCBTaWduYXR1cmUgVHJ1c3QgQ28uMREwDwYDVQQL
-EwhEU1RDQSBFMjAeFw05ODEyMDkxOTE3MjZaFw0xODEyMDkxOTQ3MjZaMEYxCzAJ
-BgNVBAYTAlVTMSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4x
-ETAPBgNVBAsTCERTVENBIEUyMIGdMA0GCSqGSIb3DQEBAQUAA4GLADCBhwKBgQC/
-k48Xku8zExjrEH9OFr//Bo8qhbxe+SSmJIi2A7fBw18DW9Fvrn5C6mYjuGODVvso
-LeE4i7TuqAHhzhy2iCoiRoX7n6dwqUcUP87eZfCocfdPJmyMvMa1795JJ/9IKn3o
-TQPMx7JSxhcxEzu1TdvIxPbDDyQq2gyd55FbgM2UnQIBA6OCASQwggEgMBEGCWCG
-SAGG+EIBAQQEAwIABzBoBgNVHR8EYTBfMF2gW6BZpFcwVTELMAkGA1UEBhMCVVMx
-JDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UECxMI
-RFNUQ0EgRTIxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMTk5ODEyMDkxOTE3
-MjZagQ8yMDE4MTIwOTE5MTcyNlowCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaAFB6C
-TShlgDzJQW6sNS5ay97u+DlbMB0GA1UdDgQWBBQegk0oZYA8yUFurDUuWsve7vg5
-WzAMBgNVHRMEBTADAQH/MBkGCSqGSIb2fQdBAAQMMAobBFY0LjADAgSQMA0GCSqG
-SIb3DQEBBQUAA4GBAEeNg61i8tuwnkUiBbmi1gMOOHLnnvx75pO2mqWilMg0HZHR
-xdf0CiUPPXiBng+xZ8SQTGPdXqfiup/1902lMXucKS1M/mQ+7LZT/uqb7YLbdHVL
-B3luHtgZg3Pe9T7Qtd7nS2h9Qy4qIOF+oHhEngj1mPnHfxsb1gYgAlihw6ID
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID2DCCAsACEQDQHkCLAAB3bQAAAAEAAAAEMA0GCSqGSIb3DQEBBQUAMIGpMQsw
-CQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMOU2FsdCBMYWtlIENp
-dHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0IENvLjERMA8GA1UE
-CxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIxITAfBgkqhkiG9w0B
-CQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTAeFw05ODExMzAyMjQ2MTZaFw0wODExMjcy
-MjQ2MTZaMIGpMQswCQYDVQQGEwJ1czENMAsGA1UECBMEVXRhaDEXMBUGA1UEBxMO
-U2FsdCBMYWtlIENpdHkxJDAiBgNVBAoTG0RpZ2l0YWwgU2lnbmF0dXJlIFRydXN0
-IENvLjERMA8GA1UECxMIRFNUQ0EgWDIxFjAUBgNVBAMTDURTVCBSb290Q0EgWDIx
-ITAfBgkqhkiG9w0BCQEWEmNhQGRpZ3NpZ3RydXN0LmNvbTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBANx18IzAdZaawGIfJvfE4Zrq4FZzW5nNAUSoCLbV
-p9oaBBg5kkp4o4HC9Xd6ULRw/5qrxsfKboNPQpj7Jgva3G3WqZlVUmfpKAOS3OWw
-BZoPFflrWXJW8vo5/Kpo7g8fEIMv/J36F5bdguPmRX3AS4BEH+0s4IT9kVySVGkl
-5WJp3OXuAFK9MwutdQKFp2RQLcUZGTDAJtvJ0/0uma1ZtQtN1EGuhUhDWdy3qOKi
-3sOP17ihYqZoUFLkzzGnlIXan0YyF1bl8utmPRL/Q9uY73fPy4GNNLHGUEom0eQ+
-QVCvbK4iNC7Va26Dunm4dmVI2gkpZGMiuftHdoWMhkTLCdsCAwEAATANBgkqhkiG
-9w0BAQUFAAOCAQEAtTYOXeFhKFoRZcA/gwN5Tb4opgsHAlKFzfiR0BBstWogWxyQ
-2TA8xkieil5k+aFxd+8EJx8H6+Qm93N0yUQYGmbT4EOvkTvRyyzYdFQ6HE3K1GjN
-I3wdEJ5F6fYAbqbNGf9PLCmPV03Ed5K+4EwJ+11EhmYhqLkyolbV6YyDfFk/xPEL
-553snr2cGA4+wjl5KLcDDQjLxufZATdQEOzMYRZA1K8xdHv8PzGn0EdzMzkbzE5q
-10mDEQb+64JYMzJM8FasHpwvVpp7wUocpf1VNs78lk30sPDst2yC7S8xmUJMqbIN
-uBVd8d+6ybVK1GSYsyapMMj9puyrliGtf8J4tg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEgzCCA+ygAwIBAgIEOJ725DANBgkqhkiG9w0BAQQFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9HQ0NBX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENsaWVu
-dCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDcxNjE2NDBaFw0yMDAy
-MDcxNjQ2NDBaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0dDQ0FfQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDIwMDAgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTdLS25MVL1qFof2LV7PdRV7Ny
-Spj10InJrWPNTTVRaoTUrcloeW+46xHbh65cJFET8VQlhK8pK5/jgOLZy93GRUk0
-iJBeAZfv6lOm3fzB3ksqJeTpNfpVBQbliXrqpBFXO/x8PTbNZzVtpKklWb1m9fkn
-5JVn1j+SgF7yNH0rhQIDAQABo4IBnjCCAZowEQYJYIZIAYb4QgEBBAQDAgAHMIHd
-BgNVHR8EgdUwgdIwgc+ggcyggcmkgcYwgcMxFDASBgNVBAoTC0VudHJ1c3QubmV0
-MUAwPgYDVQQLFDd3d3cuZW50cnVzdC5uZXQvR0NDQV9DUFMgaW5jb3JwLiBieSBy
-ZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5l
-dCBMaW1pdGVkMTMwMQYDVQQDEypFbnRydXN0Lm5ldCBDbGllbnQgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMDAy
-MDcxNjE2NDBagQ8yMDIwMDIwNzE2NDY0MFowCwYDVR0PBAQDAgEGMB8GA1UdIwQY
-MBaAFISLdP3FjcD/J20gN0V8/i3OutN9MB0GA1UdDgQWBBSEi3T9xY3A/ydtIDdF
-fP4tzrrTfTAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4w
-AwIEkDANBgkqhkiG9w0BAQQFAAOBgQBObzWAO9GK9Q6nIMstZVXQkvTnhLUGJoMS
-hAusO7JE7r3PQNsgDrpuFOow4DtifH+La3xKp9U1PL6oXOpLu5OOgGarDyn9TS2/
-GpsKkMWr2tGzhtQvJFJcem3G8v7lTRowjJDyutdKPkN+1MhQGof4T4HHdguEOnKd
-zmVml64mXg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIElTCCA/6gAwIBAgIEOJsRPDANBgkqhkiG9w0BAQQFADCBujEUMBIGA1UEChML
-RW50cnVzdC5uZXQxPzA9BgNVBAsUNnd3dy5lbnRydXN0Lm5ldC9TU0xfQ1BTIGlu
-Y29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMcKGMpIDIwMDAg
-RW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5uZXQgU2VjdXJl
-IFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMDAyMDQxNzIwMDBa
-Fw0yMDAyMDQxNzUwMDBaMIG6MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDE/MD0GA1UE
-CxQ2d3d3LmVudHJ1c3QubmV0L1NTTF9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMjAwMCBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDHwV9OcfHO
-8GCGD9JYf9Mzly0XonUwtZZkJi9ow0SrqHXmAGc0V55lxyKbc+bT3QgON1WqJUaB
-bL3+qPZ1V1eMkGxKwz6LS0MKyRFWmponIpnPVZ5h2QLifLZ8OAfc439PmrkDQYC2
-dWcTC5/oVzbIXQA23mYU2m52H083jIITiQIDAQABo4IBpDCCAaAwEQYJYIZIAYb4
-QgEBBAQDAgAHMIHjBgNVHR8EgdswgdgwgdWggdKggc+kgcwwgckxFDASBgNVBAoT
-C0VudHJ1c3QubmV0MT8wPQYDVQQLFDZ3d3cuZW50cnVzdC5uZXQvU1NMX0NQUyBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAyMDAw
-IEVudHJ1c3QubmV0IExpbWl0ZWQxOjA4BgNVBAMTMUVudHJ1c3QubmV0IFNlY3Vy
-ZSBTZXJ2ZXIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxDTALBgNVBAMTBENSTDEw
-KwYDVR0QBCQwIoAPMjAwMDAyMDQxNzIwMDBagQ8yMDIwMDIwNDE3NTAwMFowCwYD
-VR0PBAQDAgEGMB8GA1UdIwQYMBaAFMtswGvjuz7L/CKc/vuLkpyw8m4iMB0GA1Ud
-DgQWBBTLbMBr47s+y/winP77i5KcsPJuIjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2
-fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQQFAAOBgQBi24GRzsia
-d0Iv7L0no1MPUBvqTpLwqa+poLpIYcvvyQbvH9X07t9WLebKahlzqlO+krNQAraF
-JnJj2HVQYnUUt7NQGj/KEQALhUVpbbalrlHhStyCP2yMNLJ3a9kC9n8O6mUE8c1U
-yrrJzOCE98g+EZfTYAkYvAX/bIkz8OwVDw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEXDCCA0SgAwIBAgIEOGO5ZjANBgkqhkiG9w0BAQUFADCBtDEUMBIGA1UEChML
-RW50cnVzdC5uZXQxQDA+BgNVBAsUN3d3dy5lbnRydXN0Lm5ldC9DUFNfMjA0OCBp
-bmNvcnAuIGJ5IHJlZi4gKGxpbWl0cyBsaWFiLikxJTAjBgNVBAsTHChjKSAxOTk5
-IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNVBAMTKkVudHJ1c3QubmV0IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5ICgyMDQ4KTAeFw05OTEyMjQxNzUwNTFaFw0xOTEy
-MjQxODIwNTFaMIG0MRQwEgYDVQQKEwtFbnRydXN0Lm5ldDFAMD4GA1UECxQ3d3d3
-LmVudHJ1c3QubmV0L0NQU18yMDQ4IGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxp
-YWIuKTElMCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEG
-A1UEAxMqRW50cnVzdC5uZXQgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgKDIwNDgp
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArU1LqRKGsuqjIAcVFmQq
-K0vRvwtKTY7tgHalZ7d4QMBzQshowNtTK91euHaYNZOLGp18EzoOH1u3Hs/lJBQe
-sYGpjX24zGtLA/ECDNyrpUAkAH90lKGdCCmziAv1h3edVc3kw37XamSrhRSGlVuX
-MlBvPci6Zgzj/L24ScF2iUkZ/cCovYmjZy/Gn7xxGWC4LeksyZB2ZnuU4q941mVT
-XTzWnLLPKQP5L6RQstRIzgUyVYr9smRMDuSYB3Xbf9+5CFVghTAp+XtIpGmG4zU/
-HoZdenoVve8AjhUiVBcAkCaTvA5JaJG/+EfTnZVCwQ5N328mz8MYIWJmQ3DW1cAH
-4QIDAQABo3QwcjARBglghkgBhvhCAQEEBAMCAAcwHwYDVR0jBBgwFoAUVeSB0RGA
-vtiJuQijMfmhJAkWuXAwHQYDVR0OBBYEFFXkgdERgL7YibkIozH5oSQJFrlwMB0G
-CSqGSIb2fQdBAAQQMA4bCFY1LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEA
-WUesIYSKF8mciVMeuoCFGsY8Tj6xnLZ8xpJdGGQC49MGCBFhfGPjK50xA3B20qMo
-oPS7mmNz7W3lKtvtFKkrxjYR0CvrB4ul2p5cGZ1WEvVUKcgF7bISKo30Axv/55IQ
-h7A6tcOdBTcSo8f0FbnVpDkWm1M6I5HxqIKiaohowXkCIryqptau37AUX7iH0N18
-f3v/rxzP5tsHrV7bhZ3QKw0z2wTR5klAEyt2+z7pnIkPFc4YsIV4IU9rTw76NmfN
-B/L/CNDi3tm/Kq+4h4YhPATKt5Rof8886ZjXOP/swNlQ8C5LWK5Gb9Auw2DaclVy
-vUxFnmG6v4SBkgPR0ml8xQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE7TCCBFagAwIBAgIEOAOR7jANBgkqhkiG9w0BAQQFADCByTELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MUgwRgYDVQQLFD93d3cuZW50cnVzdC5u
-ZXQvQ2xpZW50X0NBX0luZm8vQ1BTIGluY29ycC4gYnkgcmVmLiBsaW1pdHMgbGlh
-Yi4xJTAjBgNVBAsTHChjKSAxOTk5IEVudHJ1c3QubmV0IExpbWl0ZWQxMzAxBgNV
-BAMTKkVudHJ1c3QubmV0IENsaWVudCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAe
-Fw05OTEwMTIxOTI0MzBaFw0xOTEwMTIxOTU0MzBaMIHJMQswCQYDVQQGEwJVUzEU
-MBIGA1UEChMLRW50cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9D
-bGllbnRfQ0FfSW5mby9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjEl
-MCMGA1UECxMcKGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMq
-RW50cnVzdC5uZXQgQ2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0G
-CSqGSIb3DQEBAQUAA4GLADCBhwKBgQDIOpleMRffrCdvkHvkGf9FozTC28GoT/Bo
-6oT9n3V5z8GKUZSvx1cDR2SerYIbWtp/N3hHuzeYEpbOxhN979IMMFGpOZ5V+Pux
-5zDeg7K6PvHViTs7hbqqdCz+PzFur5GVbgbUB01LLFZHGARS2g4Qk79jkJvh34zm
-AqTmT173iwIBA6OCAeAwggHcMBEGCWCGSAGG+EIBAQQEAwIABzCCASIGA1UdHwSC
-ARkwggEVMIHkoIHhoIHepIHbMIHYMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50
-cnVzdC5uZXQxSDBGBgNVBAsUP3d3dy5lbnRydXN0Lm5ldC9DbGllbnRfQ0FfSW5m
-by9DUFMgaW5jb3JwLiBieSByZWYuIGxpbWl0cyBsaWFiLjElMCMGA1UECxMcKGMp
-IDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDEzMDEGA1UEAxMqRW50cnVzdC5uZXQg
-Q2xpZW50IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCyg
-KqAohiZodHRwOi8vd3d3LmVudHJ1c3QubmV0L0NSTC9DbGllbnQxLmNybDArBgNV
-HRAEJDAigA8xOTk5MTAxMjE5MjQzMFqBDzIwMTkxMDEyMTkyNDMwWjALBgNVHQ8E
-BAMCAQYwHwYDVR0jBBgwFoAUxPucKXuXzUyW/O5bs8qZdIuV6kwwHQYDVR0OBBYE
-FMT7nCl7l81MlvzuW7PKmXSLlepMMAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EA
-BAwwChsEVjQuMAMCBJAwDQYJKoZIhvcNAQEEBQADgYEAP66K8ddmAwWePvrqHEa7
-pFuPeJoSSJn59DXeDDYHAmsQOokUgZwxpnyyQbJq5wcBoUv5nyU7lsqZwz6hURzz
-wy5E97BnRqqS5TvaHBkUODDV4qIxJS7x7EU47fgGWANzYrAQMY9Av2TgXD7FTx/a
-EkP/TOYGJqibGapEPHayXOw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE2DCCBEGgAwIBAgIEN0rSQzANBgkqhkiG9w0BAQUFADCBwzELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC0VudHJ1c3QubmV0MTswOQYDVQQLEzJ3d3cuZW50cnVzdC5u
-ZXQvQ1BTIGluY29ycC4gYnkgcmVmLiAobGltaXRzIGxpYWIuKTElMCMGA1UECxMc
-KGMpIDE5OTkgRW50cnVzdC5uZXQgTGltaXRlZDE6MDgGA1UEAxMxRW50cnVzdC5u
-ZXQgU2VjdXJlIFNlcnZlciBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05OTA1
-MjUxNjA5NDBaFw0xOTA1MjUxNjM5NDBaMIHDMQswCQYDVQQGEwJVUzEUMBIGA1UE
-ChMLRW50cnVzdC5uZXQxOzA5BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5j
-b3JwLiBieSByZWYuIChsaW1pdHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBF
-bnRydXN0Lm5ldCBMaW1pdGVkMTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUg
-U2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGdMA0GCSqGSIb3DQEBAQUA
-A4GLADCBhwKBgQDNKIM0VBuJ8w+vN5Ex/68xYMmo6LIQaO2f55M28Qpku0f1BBc/
-I0dNxScZgSYMVHINiC3ZH5oSn7yzcdOAGT9HZnuMNSjSuQrfJNqc1lB5gXpa0zf3
-wkrYKZImZNHkmGw6AIr1NJtl+O3jEP/9uElY3KDegjlrgbEWGWG5VLbmQwIBA6OC
-AdcwggHTMBEGCWCGSAGG+EIBAQQEAwIABzCCARkGA1UdHwSCARAwggEMMIHeoIHb
-oIHYpIHVMIHSMQswCQYDVQQGEwJVUzEUMBIGA1UEChMLRW50cnVzdC5uZXQxOzA5
-BgNVBAsTMnd3dy5lbnRydXN0Lm5ldC9DUFMgaW5jb3JwLiBieSByZWYuIChsaW1p
-dHMgbGlhYi4pMSUwIwYDVQQLExwoYykgMTk5OSBFbnRydXN0Lm5ldCBMaW1pdGVk
-MTowOAYDVQQDEzFFbnRydXN0Lm5ldCBTZWN1cmUgU2VydmVyIENlcnRpZmljYXRp
-b24gQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMCmgJ6AlhiNodHRwOi8vd3d3LmVu
-dHJ1c3QubmV0L0NSTC9uZXQxLmNybDArBgNVHRAEJDAigA8xOTk5MDUyNTE2MDk0
-MFqBDzIwMTkwNTI1MTYwOTQwWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAU8Bdi
-E1U9s/8KAGv7UISX8+1i0BowHQYDVR0OBBYEFPAXYhNVPbP/CgBr+1CEl/PtYtAa
-MAwGA1UdEwQFMAMBAf8wGQYJKoZIhvZ9B0EABAwwChsEVjQuMAMCBJAwDQYJKoZI
-hvcNAQEFBQADgYEAkNwwAvpkdMKnCqV8IY00F6j7Rw7/JXyNEwr75Ji174z4xRAN
-95K+8cPV1ZVqBLssziY2ZcgxxufuP+NXdYR6Ee9GTxj005i7qIcyunL2POI9n9cd
-2cNgQ4xYDiKWL2KjLB+6rQXvqzJ4h6BUcxm1XAX5Uj5tLUUL9wqT6u0G+bI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEkTCCA3mgAwIBAgIERWtQVDANBgkqhkiG9w0BAQUFADCBsDELMAkGA1UEBhMC
-VVMxFjAUBgNVBAoTDUVudHJ1c3QsIEluYy4xOTA3BgNVBAsTMHd3dy5lbnRydXN0
-Lm5ldC9DUFMgaXMgaW5jb3Jwb3JhdGVkIGJ5IHJlZmVyZW5jZTEfMB0GA1UECxMW
-KGMpIDIwMDYgRW50cnVzdCwgSW5jLjEtMCsGA1UEAxMkRW50cnVzdCBSb290IENl
-cnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA2MTEyNzIwMjM0MloXDTI2MTEyNzIw
-NTM0MlowgbAxCzAJBgNVBAYTAlVTMRYwFAYDVQQKEw1FbnRydXN0LCBJbmMuMTkw
-NwYDVQQLEzB3d3cuZW50cnVzdC5uZXQvQ1BTIGlzIGluY29ycG9yYXRlZCBieSBy
-ZWZlcmVuY2UxHzAdBgNVBAsTFihjKSAyMDA2IEVudHJ1c3QsIEluYy4xLTArBgNV
-BAMTJEVudHJ1c3QgUm9vdCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASIwDQYJ
-KoZIhvcNAQEBBQADggEPADCCAQoCggEBALaVtkNC+sZtKm9I35RMOVcF7sN5EUFo
-Nu3s/poBj6E4KPz3EEZmLk0eGrEaTsbRwJWIsMn/MYszA9u3g3s+IIRe7bJWKKf4
-4LlAcTfFy0cOlypowCKVYhXbR9n10Cv/gkvJrT7eTNuQgFA/CYqEAOwwCj0Yzfv9
-KlmaI5UXLEWeH25DeW0MXJj+SKfFI0dcXv1u5x609mhF0YaDW6KKjbHjKYD+JXGI
-rb68j6xSlkuqUY3kEzEZ6E5Nn9uss2rVvDlUccp6en+Q3X0dgNmBu1kmwhH+5pPi
-94DkZfs0Nw4pgHBNrziGLp5/V6+eF67rHMsoIV+2HNjnogQi+dPa2MsCAwEAAaOB
-sDCBrTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zArBgNVHRAEJDAi
-gA8yMDA2MTEyNzIwMjM0MlqBDzIwMjYxMTI3MjA1MzQyWjAfBgNVHSMEGDAWgBRo
-kORnpKZTgMeGZqTx90tD+4S9bTAdBgNVHQ4EFgQUaJDkZ6SmU4DHhmak8fdLQ/uE
-vW0wHQYJKoZIhvZ9B0EABBAwDhsIVjcuMTo0LjADAgSQMA0GCSqGSIb3DQEBBQUA
-A4IBAQCT1DCw1wMgKtD5Y+iRDAUgqV8ZyntyTtSx29CW+1RaGSwMCPeyvIWonX9t
-O1KzKtvn1ISMY/YPyyYBkVBs9F8U4pN0wBOeMDpQ47RgxRzwIkSNcUesyBrJ6Zua
-AGAT/3B+XxFNSRuzFVJ7yVTav52Vr2ua2J7p8eRDjeIRRDq/r72DQnNSi6q7pynP
-9WQcCk3RvKqsnyrQ/39/2n3qse0wJcGE2jTSW3iDVuycNsMm4hH2Z0kdkquM++v/
-eu6FSqdQgPCnXEqULl8FmTxSQeDNtGPPAUO6nIPcj2A781q0tHuu2guQOHXvgR1m
-0vdXcDazv/wor3ElhVsT/h5/WrQ8
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIENd70zzANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEQMA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2Vy
-dGlmaWNhdGUgQXV0aG9yaXR5MB4XDTk4MDgyMjE2NDE1MVoXDTE4MDgyMjE2NDE1
-MVowTjELMAkGA1UEBhMCVVMxEDAOBgNVBAoTB0VxdWlmYXgxLTArBgNVBAsTJEVx
-dWlmYXggU2VjdXJlIENlcnRpZmljYXRlIEF1dGhvcml0eTCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAwV2xWGcIYu6gmi0fCG2RFGiYCh7+2gRvE4RiIcPRfM6f
-BeC4AfBONOziipUEZKzxa1NfBbPLZ4C/QgKO/t0BCezhABRP/PvwDN1Dulsr4R+A
-cJkVV5MW8Q+XarfCaCMczE1ZMKxRHjuvK9buY0V7xdlfUNLjUA86iOe/FP3gx7kC
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEQ
-MA4GA1UEChMHRXF1aWZheDEtMCsGA1UECxMkRXF1aWZheCBTZWN1cmUgQ2VydGlm
-aWNhdGUgQXV0aG9yaXR5MQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTgw
-ODIyMTY0MTUxWjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUSOZo+SvSspXXR9gj
-IBBPM5iQn9QwHQYDVR0OBBYEFEjmaPkr0rKV10fYIyAQTzOYkJ/UMAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAFjOKer89961zgK5F7WF0bnj4JXMJTENAKaSbn+2kmOeUJXRmm/kEd5jhW6Y
-7qj/WsjTVbJmcVfewCHrPSqnI0kBBIZCe/zuf6IWUrVnZ9NA2zsmWLIodz2uFHdh
-1voqZiegDfqnc1zqcPGUIWVEX/r87yloqaKHee9570+sB3c4
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICkDCCAfmgAwIBAgIBATANBgkqhkiG9w0BAQQFADBaMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEtMCsGA1UEAxMkRXF1aWZheCBT
-ZWN1cmUgR2xvYmFsIGVCdXNpbmVzcyBDQS0xMB4XDTk5MDYyMTA0MDAwMFoXDTIw
-MDYyMTA0MDAwMFowWjELMAkGA1UEBhMCVVMxHDAaBgNVBAoTE0VxdWlmYXggU2Vj
-dXJlIEluYy4xLTArBgNVBAMTJEVxdWlmYXggU2VjdXJlIEdsb2JhbCBlQnVzaW5l
-c3MgQ0EtMTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAuucXkAJlsTRVPEnC
-UdXfp9E3j9HngXNBUmCbnaEXJnitx7HoJpQytd4zjTov2/KaelpzmKNc6fuKcxtc
-58O/gGzNqfTWK8D3+ZmqY6KxRwIP1ORROhI8bIpaVIRw28HFkM9yRcuoWcDNM50/
-o5brhTMhHD4ePmBudpxnhcXIw2ECAwEAAaNmMGQwEQYJYIZIAYb4QgEBBAQDAgAH
-MA8GA1UdEwEB/wQFMAMBAf8wHwYDVR0jBBgwFoAUvqigdHJQa0S3ySPY+6j/s1dr
-aGwwHQYDVR0OBBYEFL6ooHRyUGtEt8kj2Puo/7NXa2hsMA0GCSqGSIb3DQEBBAUA
-A4GBADDiAVGqx+pf2rnQZQ8w1j7aDRRJbpGTJxQx78T3LUX47Me/okENI7SS+RkA
-Z70Br83gcfxaz2TE4JaY0KNA4gGK7ycH8WUBikQtBmV1UsCGECAhX2xrD2yuCRyv
-8qIYNMR1pHMc8Y3c7635s3a0kr/clRAevsvIO1qEYBlWlKlV
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICgjCCAeugAwIBAgIBBDANBgkqhkiG9w0BAQQFADBTMQswCQYDVQQGEwJVUzEc
-MBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5jLjEmMCQGA1UEAxMdRXF1aWZheCBT
-ZWN1cmUgZUJ1c2luZXNzIENBLTEwHhcNOTkwNjIxMDQwMDAwWhcNMjAwNjIxMDQw
-MDAwWjBTMQswCQYDVQQGEwJVUzEcMBoGA1UEChMTRXF1aWZheCBTZWN1cmUgSW5j
-LjEmMCQGA1UEAxMdRXF1aWZheCBTZWN1cmUgZUJ1c2luZXNzIENBLTEwgZ8wDQYJ
-KoZIhvcNAQEBBQADgY0AMIGJAoGBAM4vGbwXt3fek6lfWg0XTzQaDJj0ItlZ1MRo
-RvC0NcWFAyDGr0WlIVFFQesWWDYyb+JQYmT5/VGcqiTZ9J2DKocKIdMSODRsjQBu
-WqDZQu4aIZX5UkxVWsUPOE9G+m34LjXWHXzr4vCwdYDIqROsvojvOm6rXyo4YgKw
-Env+j6YDAgMBAAGjZjBkMBEGCWCGSAGG+EIBAQQEAwIABzAPBgNVHRMBAf8EBTAD
-AQH/MB8GA1UdIwQYMBaAFEp4MlIR21kWNl7fwRQ2QGpHfEyhMB0GA1UdDgQWBBRK
-eDJSEdtZFjZe38EUNkBqR3xMoTANBgkqhkiG9w0BAQQFAAOBgQB1W6ibAxHm6VZM
-zfmpTMANmvPMZWnmJXbMWbfWVMMdzZmsGd20hdXgPfxiIKeES1hl8eL5lSE/9dR+
-WB5Hh1Q+WKG1tfgq73HnvMP2sUlG4tega+VWeponmHxGYhTnyfxuAxJ5gDgdSIKN
-/Bf+KpYrtWKmpj29f5JZzVoqgrI3eQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAomgAwIBAgIEN3DPtTANBgkqhkiG9w0BAQUFADBOMQswCQYDVQQGEwJV
-UzEXMBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2Vj
-dXJlIGVCdXNpbmVzcyBDQS0yMB4XDTk5MDYyMzEyMTQ0NVoXDTE5MDYyMzEyMTQ0
-NVowTjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDkVxdWlmYXggU2VjdXJlMSYwJAYD
-VQQLEx1FcXVpZmF4IFNlY3VyZSBlQnVzaW5lc3MgQ0EtMjCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEA5Dk5kx5SBhsoNviyoynF7Y6yEb3+6+e0dMKP/wXn2Z0G
-vxLIPw7y1tEkshHe0XMJitSxLJgJDR5QRrKDpkWNYmi7hRsgcDKqQM2mll/EcTc/
-BPO3QSQ5BxoeLmFYoBIL5aXfxavqN3HMHMg3OrmXUqesxWoklE6ce8/AatbfIb0C
-AwEAAaOCAQkwggEFMHAGA1UdHwRpMGcwZaBjoGGkXzBdMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMORXF1aWZheCBTZWN1cmUxJjAkBgNVBAsTHUVxdWlmYXggU2VjdXJl
-IGVCdXNpbmVzcyBDQS0yMQ0wCwYDVQQDEwRDUkwxMBoGA1UdEAQTMBGBDzIwMTkw
-NjIzMTIxNDQ1WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUUJ4L6q9euSBIplBq
-y/3YIHqngnYwHQYDVR0OBBYEFFCeC+qvXrkgSKZQasv92CB6p4J2MAwGA1UdEwQF
-MAMBAf8wGgYJKoZIhvZ9B0EABA0wCxsFVjMuMGMDAgbAMA0GCSqGSIb3DQEBBQUA
-A4GBAAyGgq3oThr1jokn4jVYPSm0B482UJW/bsGe68SQsoWou7dC4A8HOd/7npCy
-0cE+U58DRLB+S/Rv5Hwf5+Kx5Lia78O9zt4LMjTZ3ijtM2vE1Nc9ElirfQkty3D1
-E4qUoSek1nDFbZS1yX2doNLGCEnZZpum0/QL3MUmV+GRMOrN
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEVzCCAz+gAwIBAgIBATANBgkqhkiG9w0BAQUFADCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-HhcNMDExMDI0MjIwMDAwWhcNMTMxMDI0MjIwMDAwWjCBnTELMAkGA1UEBhMCRVMx
-IjAgBgNVBAcTGUMvIE11bnRhbmVyIDI0NCBCYXJjZWxvbmExQjBABgNVBAMTOUF1
-dG9yaWRhZCBkZSBDZXJ0aWZpY2FjaW9uIEZpcm1hcHJvZmVzaW9uYWwgQ0lGIEE2
-MjYzNDA2ODEmMCQGCSqGSIb3DQEJARYXY2FAZmlybWFwcm9mZXNpb25hbC5jb20w
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDnIwNvbyOlXnjOlSztlB5u
-Cp4Bx+ow0Syd3Tfom5h5VtP8c9/Qit5Vj1H5WuretXDE7aTt/6MNbg9kUDGvASdY
-rv5sp0ovFy3Tc9UTHI9ZpTQsHVQERc1ouKDAA6XPhUJHlShbz++AbOCQl4oBPB3z
-hxAwJkh91/zpnZFx/0GaqUC1N5wpIE8fUuOgfRNtVLcK3ulqTgesrBlf3H5idPay
-BQC6haD9HThuy1q7hryUZzM1gywfI834yJFxzJeL764P3CkDG8A563DtwW4O2GcL
-iam8NeTvtjS0pbbELaW+0MOUJEjb35bTALVmGotmBQ/dPz/LP6pemkr4tErvlTcb
-AgMBAAGjgZ8wgZwwKgYDVR0RBCMwIYYfaHR0cDovL3d3dy5maXJtYXByb2Zlc2lv
-bmFsLmNvbTASBgNVHRMBAf8ECDAGAQH/AgEBMCsGA1UdEAQkMCKADzIwMDExMDI0
-MjIwMDAwWoEPMjAxMzEwMjQyMjAwMDBaMA4GA1UdDwEB/wQEAwIBBjAdBgNVHQ4E
-FgQUMwugZtHq2s7eYpMEKFK1FH84aLcwDQYJKoZIhvcNAQEFBQADggEBAEdz/o0n
-VPD11HecJ3lXV7cVVuzH2Fi3AQL0M+2TUIiefEaxvT8Ub/GzR0iLjJcG1+p+o1wq
-u00vR+L4OQbJnC4xGgN49Lw4xiKLMzHwFgQEffl25EvXwOaD7FnMP97/T2u3Z36m
-hoEyIwOdyPdfwUpgpZKpsaSgYMN4h7Mi8yrrW6ntBas3D7Hi05V2Y1Z0jFhyGzfl
-ZKG+TQyTmAyX9odtsz/ny4Cm7YjHX1BiAuiZdBbQ5rQ58SfLyEDW44YQqSMSkuBp
-QWOnryULwMWSyx6Yo1q6xTMPoJcB3X/ge9YGVM+h4k0460tQtcsm9MracEpqoeJ5
-quGnM/b9Sh/22WA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICWjCCAcMCAgGlMA0GCSqGSIb3DQEBBAUAMHUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xJzAlBgNVBAsTHkdURSBDeWJlclRydXN0IFNv
-bHV0aW9ucywgSW5jLjEjMCEGA1UEAxMaR1RFIEN5YmVyVHJ1c3QgR2xvYmFsIFJv
-b3QwHhcNOTgwODEzMDAyOTAwWhcNMTgwODEzMjM1OTAwWjB1MQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMScwJQYDVQQLEx5HVEUgQ3liZXJU
-cnVzdCBTb2x1dGlvbnMsIEluYy4xIzAhBgNVBAMTGkdURSBDeWJlclRydXN0IEds
-b2JhbCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCVD6C28FCc6HrH
-iM3dFw4usJTQGz0O9pTAipTHBsiQl8i4ZBp6fmw8U+E3KHNgf7KXUwefU/ltWJTS
-r41tiGeA5u2ylc9yMcqlHHK6XALnZELn+aks1joNrI1CqiQBOeacPwGFVw1Yh0X4
-04Wqk2kmhXBIgD8SFcd5tB8FLztimQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBAG3r
-GwnpXtlR22ciYaQqPEh346B8pt5zohQDhT37qw4wxYMWM4ETCJ57NE7fQMh017l9
-3PR2VX2bY1QY6fDq81yx2YtCHrnAlU66+tXifPVoYb+O7AWXX1uw16OFNMQkpw0P
-lZPvy5TYnh+dXIVtx6quTx8itc2VrbqnzPmrC3p/
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIB+jCCAWMCAgGjMA0GCSqGSIb3DQEBBAUAMEUxCzAJBgNVBAYTAlVTMRgwFgYD
-VQQKEw9HVEUgQ29ycG9yYXRpb24xHDAaBgNVBAMTE0dURSBDeWJlclRydXN0IFJv
-b3QwHhcNOTYwMjIzMjMwMTAwWhcNMDYwMjIzMjM1OTAwWjBFMQswCQYDVQQGEwJV
-UzEYMBYGA1UEChMPR1RFIENvcnBvcmF0aW9uMRwwGgYDVQQDExNHVEUgQ3liZXJU
-cnVzdCBSb290MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC45k+625h8cXyv
-RLfTD0bZZOWTwUKOx7pJjTUteueLveUFMVnGsS8KDPufpz+iCWaEVh43KRuH6X4M
-ypqfpX/1FZSj1aJGgthoTNE3FQZor734sLPwKfWVWgkWYXcKIiXUT0Wqx73llt/5
-1KiOQswkwB6RJ0q1bQaAYznEol44AwIDAQABMA0GCSqGSIb3DQEBBAUAA4GBABKz
-dcZfHeFhVYAA1IFLezEPI2PnPfMD+fQ2qLvZ46WXTeorKeDWanOB5sCJo9Px4KWl
-IjeaY8JIILTbcuPI9tl8vrGvU9oUtCG41tWW4/5ODFlitppK+ULdjG+BqXH/9Apy
-bW1EDp3zdHSo1TRJ6V6e6bR64eVaH4QwnNOfpSXY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDVDCCAjygAwIBAgIDAjRWMA0GCSqGSIb3DQEBBQUAMEIxCzAJBgNVBAYTAlVT
-MRYwFAYDVQQKEw1HZW9UcnVzdCBJbmMuMRswGQYDVQQDExJHZW9UcnVzdCBHbG9i
-YWwgQ0EwHhcNMDIwNTIxMDQwMDAwWhcNMjIwNTIxMDQwMDAwWjBCMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEbMBkGA1UEAxMSR2VvVHJ1c3Qg
-R2xvYmFsIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA2swYYzD9
-9BcjGlZ+W988bDjkcbd4kdS8odhM+KhDtgPpTSEHCIjaWC9mOSm9BXiLnTjoBbdq
-fnGk5sRgprDvgOSJKA+eJdbtg/OtppHHmMlCGDUUna2YRpIuT8rxh0PBFpVXLVDv
-iS2Aelet8u5fa9IAjbkU+BQVNdnARqN7csiRv8lVK83Qlz6cJmTM386DGXHKTubU
-1XupGc1V3sjs0l44U+VcT4wt/lAjNvxm5suOpDkZALeVAjmRCw7+OC7RHQWa9k0+
-bw8HHa8sHo9gOeL6NlMTOdReJivbPagUvTLrGAMoUgRx5aszPeE4uwc2hGKceeoW
-MPRfwCvocWvk+QIDAQABo1MwUTAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBTA
-ephojYn7qwVkDBF9qn1luMrMTjAfBgNVHSMEGDAWgBTAephojYn7qwVkDBF9qn1l
-uMrMTjANBgkqhkiG9w0BAQUFAAOCAQEANeMpauUvXVSOKVCUn5kaFOSPeCpilKIn
-Z57QzxpeR+nBsqTP3UEaBU6bS+5Kb1VSsyShNwrrZHYqLizz/Tt1kL/6cdjHPTfS
-tQWVYrmm3ok9Nns4d0iXrKYgjy6myQzCsplFAMfOEVEiIuCl6rYVSAlk6l5PdPcF
-PseKUgzbFbS9bZvlxrFUaKnjaZC2mqUPuLk/IH2uSrW4nOQdtqvmlKXBx4Ot2/Un
-hw4EbNX/3aBd7YdStysVAq45pmp06drE57xNNB6pXE0zX5IJL4hmXXeXxx12E6nV
-5fEWCRE11azbJHFwLJhWC9kXtNHjUStedejV0NxPNO3CBWaAocvmMw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDZjCCAk6gAwIBAgIBATANBgkqhkiG9w0BAQUFADBEMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3QgR2xvYmFs
-IENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMTkwMzA0MDUwMDAwWjBEMQswCQYDVQQG
-EwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEdMBsGA1UEAxMUR2VvVHJ1c3Qg
-R2xvYmFsIENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDvPE1A
-PRDfO1MA4Wf+lGAVPoWI8YkNkMgoI5kF6CsgncbzYEbYwbLVjDHZ3CB5JIG/NTL8
-Y2nbsSpr7iFY8gjpeMtvy/wWUsiRxP89c96xPqfCfWbB9X5SJBri1WeR0IIQ13hL
-TytCOb1kLUCgsBDTOEhGiKEMuzozKmKY+wCdE1l/bztyqu6mD4b5BWHqZ38MN5aL
-5mkWRxHCJ1kDs6ZgwiFAVvqgx306E+PsV8ez1q6diYD3Aecs9pYrEw15LNnA5IZ7
-S4wMcoKK+xfNAGw6EzywhIdLFnopsk/bHdQL82Y3vdj2V7teJHq4PIu5+pIaGoSe
-2HSPqht/XvT+RSIhAgMBAAGjYzBhMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYE
-FHE4NvICMVNHK266ZUapEBVYIAUJMB8GA1UdIwQYMBaAFHE4NvICMVNHK266ZUap
-EBVYIAUJMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG9w0BAQUFAAOCAQEAA/e1K6td
-EPx7srJerJsOflN4WT5CBP51o62sgU7XAotexC3IUnbHLB/8gTKY0UvGkpMzNTEv
-/NgdRN3ggX+d6YvhZJFiCzkIjKx0nVnZellSlxG5FntvRdOW2TF9AjYPnDtuzywN
-A0ZF66D0f0hExghAzN4bcLUprbqLOzRldRtxIR0sFAqwlpW41uryZfspuk/qkZN0
-abby/+Ea0AzRdoXLiiW9l14sbxWZJue2Kf8i7MkCx1YAzUm5s2x7UwQa4qjJqhIF
-I8LO57sEAszAR6LkxCkvW0VXiVHuPOtSCP8HNR6fNWpHSlaY0VqFH4z1Ir+rzoPz
-4iIprn2DQKi6bA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDfDCCAmSgAwIBAgIQGKy1av1pthU6Y2yv2vrEoTANBgkqhkiG9w0BAQUFADBY
-MQswCQYDVQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjExMC8GA1UEAxMo
-R2VvVHJ1c3QgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjEx
-MjcwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMFgxCzAJBgNVBAYTAlVTMRYwFAYDVQQK
-Ew1HZW9UcnVzdCBJbmMuMTEwLwYDVQQDEyhHZW9UcnVzdCBQcmltYXJ5IENlcnRp
-ZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKC
-AQEAvrgVe//UfH1nrYNke8hCUy3f9oQIIGHWAVlqnEQRr+92/ZV+zmEwu3qDXwK9
-AWbK7hWNb6EwnL2hhZ6UOvNWiAAxz9juapYC2e0DjPt1befquFUWBRaa9OBesYjA
-ZIVcFU2Ix7e64HXprQU9nceJSOC7KMgD4TCTZF5SwFlwIjVXiIrxlQqD17wxcwE0
-7e9GceBrAqg1cmuXm2bgyxx5X9gaBGgeRwLmnWDiNpcB3841kt++Z8dtd1k7j53W
-kBWUvEI0EME5+bEnPn7WinXFsq+W06Lem+SYvn3h6YGttm/81w7a4DSwDRp35+MI
-mO9Y+pyEtzavwt+s0vQQBnBxNQIDAQABo0IwQDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAdBgNVHQ4EFgQULNVQQZcVi/CPNmFbSvtr2ZnJM5IwDQYJ
-KoZIhvcNAQEFBQADggEBAFpwfyzdtzRP9YZRqSa+S7iq8XEN3GHHoOo0Hnp3DwQ1
-6CePbJC/kRYkRj5KTs4rFtULUh38H2eiAkUxT87z+gOneZ1TatnaYzr4gNfTmeGl
-4b7UVXGYNTq+k+qurUKykG/g/CFNNWMziUnWm07Kx+dOCQD32sfvmWKZd7aVIl6K
-oKv0uHiYyjgZmclynnjNS6yvGaBzEi38wkG6gZHaFloxt/m0cYASSJlyc1pZU8Fj
-UjPtp8nSOQJw+uCxQmYpqptR7TBUIhRf2asdweSU8Pj1K/fqynhG1riR/aYNKxoU
-AT6A8EKglQdebc3MS6RFjasS6LPeWuWgfOgPIh1a6Vk=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCA1CgAwIBAgIBATANBgkqhkiG9w0BAQUFADBFMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEeMBwGA1UEAxMVR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBMB4XDTA0MDMwNDA1MDAwMFoXDTI5MDMwNDA1MDAwMFowRTELMAkGA1UE
-BhMCVVMxFjAUBgNVBAoTDUdlb1RydXN0IEluYy4xHjAcBgNVBAMTFUdlb1RydXN0
-IFVuaXZlcnNhbCBDQTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIBAKYV
-VaCjxuAfjJ0hUNfBvitbtaSeodlyWL0AG0y/YckUHUWCq8YdgNY96xCcOq9tJPi8
-cQGeBvV8Xx7BDlXKg5pZMK4ZyzBIle0iN430SppyZj6tlcDgFgDgEB8rMQ7XlFTT
-QjOgNB0eRXbdT8oYN+yFFXoZCPzVx5zw8qkuEKmS5j1YPakWaDwvdSEYfyh3peFh
-F7em6fgemdtzbvQKoiFs7tqqhZJmr/Z6a4LauiIINQ/PQvE1+mrufislzDoR5G2v
-c7J2Ha3QsnhnGqQ5HFELZ1aD/ThdDc7d8Lsrlh/eezJS/R27tQahsiFepdaVaH/w
-mZ7cRQg+59IJDTWU3YBOU5fXtQlEIGQWFwMCTFMNaN7VqnJNk22CDtucvc+081xd
-VHppCZbW2xHBjXWotM85yM48vCR85mLK4b19p71XZQvk/iXttmkQ3CgaRr0BHdCX
-teGYO8A3ZNY9lO4L4fUorgtWv3GLIylBjobFS1J72HGrH4oVpjuDWtdYAVHGTEHZ
-f9hBZ3KiKN9gg6meyHv8U3NyWfWTehd2Ds735VzZC1U0oqpbtWpU5xPKV+yXbfRe
-Bi9Fi1jUIxaS5BZuKGNZMN9QAZxjiRqf2xeUgnA3wySemkfWWspOqGmJch+RbNt+
-nhutxx9z3SxPGWX9f5NAEC7S8O08ni4oPmkmM8V7AgMBAAGjYzBhMA8GA1UdEwEB
-/wQFMAMBAf8wHQYDVR0OBBYEFNq7LqqwDLiIJlF0XG0D08DYj3rWMB8GA1UdIwQY
-MBaAFNq7LqqwDLiIJlF0XG0D08DYj3rWMA4GA1UdDwEB/wQEAwIBhjANBgkqhkiG
-9w0BAQUFAAOCAgEAMXjmx7XfuJRAyXHEqDXsRh3ChfMoWIawC/yOsjmPRFWrZIRc
-aanQmjg8+uUfNeVE44B5lGiku8SfPeE0zTBGi1QrlaXv9z+ZhP015s8xxtxqv6fX
-IwjhmF7DWgh2qaavdy+3YL1ERmrvl/9zlcGO6JP7/TG37FcREUWbMPEaiDnBTzyn
-ANXH/KttgCJwpQzgXQQpAvvLoJHRfNbDflDVnVi+QTjruXU8FdmbyUqDWcDaU/0z
-uzYYm4UPFd3uLax2k7nZAY1IEKj79TiG8dsKxr2EoyNB3tZ3b4XUhRxQ4K5RirqN
-Pnbiucon8l+f725ZDQbYKxek0nxru18UGkiPGkzns0ccjkxFKyDuSN/n3QmOGKja
-QI2SJhFTYXNd673nxE0pN2HrrDktZy4W1vUAg4WhzH92xH3kt0tm7wNFYGm2DFKW
-koRepqO1pD4r2czYG0eq8kTaT/kD6PAUyz/zg97QwVTjt+gKN02LIFkDMBmhLMi9
-ER/frslKxfMnZmaGrGiR/9nmUxwPi1xpZQomyB40w11Re9epnAahNt3ViZS82eQt
-DF4JbAiXfKM9fJP/P6EUp8+1Xevb2xzEdt+Iub1FBZUbrvxGakyvSOPOrg/Sfuvm
-bJxPgWp6ZKy7PtXny3YuxadIwVyQD8vIP/rmMuGNG2+k5o7Y+SlIis5z/iw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFbDCCA1SgAwIBAgIBATANBgkqhkiG9w0BAQUFADBHMQswCQYDVQQGEwJVUzEW
-MBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1c3QgVW5pdmVy
-c2FsIENBIDIwHhcNMDQwMzA0MDUwMDAwWhcNMjkwMzA0MDUwMDAwWjBHMQswCQYD
-VQQGEwJVUzEWMBQGA1UEChMNR2VvVHJ1c3QgSW5jLjEgMB4GA1UEAxMXR2VvVHJ1
-c3QgVW5pdmVyc2FsIENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoIC
-AQCzVFLByT7y2dyxUxpZKeexw0Uo5dfR7cXFS6GqdHtXr0om/Nj1XqduGdt0DE81
-WzILAePb63p3NeqqWuDW6KFXlPCQo3RWlEQwAx5cTiuFJnSCegx2oG9NzkEtoBUG
-FF+3Qs17j1hhNNwqCPkuwwGmIkQcTAeC5lvO0Ep8BNMZcyfwqph/Lq9O64ceJHdq
-XbboW0W63MOhBW9Wjo8QJqVJwy7XQYci4E+GymC16qFjwAGXEHm9ADwSbSsVsaxL
-se4YuU6W3Nx2/zu+z18DwPw76L5GG//aQMJS9/7jOvdqdzXQ2o3rXhhqMcceujwb
-KNZrVMaqW9eiLBsZzKIC9ptZvTdrhrVtgrrY6slWvKk2WP0+GfPtDCapkzj4T8Fd
-IgbQl+rhrcZV4IErKIM6+vR7IVEAvlI4zs1meaj0gVbi0IMJR1FbUGrP20gaXT73
-y/Zl92zxlfgCOzJWgjl6W70viRu/obTo/3+NjN8D8WBOWBFM66M/ECuDmgFz2ZRt
-hAAnZqzwcEAJQpKtT5MNYQlRJNiS1QuUYbKHsu3/mjX/hVTK7URDrBs8FmtISgoc
-QIgfksILAAX/8sgCSqSqqcyZlpwvWOB94b67B9xfBHJcMTTD7F8t4D1kkCLm0ey4
-Lt1ZrtmhN79UNdxzMk+MBB4zsslG8dhcyFVQyWi9qLo2CQIDAQABo2MwYTAPBgNV
-HRMBAf8EBTADAQH/MB0GA1UdDgQWBBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAfBgNV
-HSMEGDAWgBR281Xh+qQ2+/CfXGJx7Tz0RzgQKzAOBgNVHQ8BAf8EBAMCAYYwDQYJ
-KoZIhvcNAQEFBQADggIBAGbBxiPz2eAubl/oz66wsCVNK/g7WJtAJDday6sWSf+z
-dXkzoS9tcBc0kf5nfo/sm+VegqlVHy/c1FEHEv6sFj4sNcZj/NwQ6w2jqtB8zNHQ
-L1EuxBRa3ugZ4T7GzKQp5y6EqgYweHZUcyiYWTjgAA1i00J9IZ+uPTqM1fp3DRgr
-Fg5fNuH8KrUwJM/gYwx7WBr+mbpCErGR9Hxo4sjoryzqyX6uuyo9DRXcNJW2GHSo
-ag/HtPQTxORb7QrSpJdMKu0vbBKJPfEncKpqA1Ihn0CoZ1Dy81of398j9tx4TuaY
-T1U6U+Pv8vSfx3zYWK8pIpe44L2RLrB27FcRz+8pRPPphXpgY+RdM4kX2TGq2tbz
-GDVyz4crL2MjhF2EjD9XoIj8mZEoJmmZ1I+XRL6O1UixpCgp8RW04eWe3fiPpm8m
-1wk8OhwRDqZsN/etRIcsKMfYdIKz0G9KV7s1KSegi+ghp4dkNl3M2Basx7InQJJV
-OCiNUW7dFGdTbHFcJoRNdVq2fmBWqU2t+5sel/MN2dKXVHfaPRK34B7vCAas+YWH
-6aLcr34YEoP9VhdBLtUpgn2Z9DH2canPLAEnpQW5qrJITirvn5NSUZU8UnOOVkwX
-QMAJKOSLakhT2+zNVVXxxvjpoixMptEmX36vWkzaH6byHCx+rgIW0lbQL1dTR+iS
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDdTCCAl2gAwIBAgILBAAAAAABFUtaw5QwDQYJKoZIhvcNAQEFBQAwVzELMAkG
-A1UEBhMCQkUxGTAXBgNVBAoTEEdsb2JhbFNpZ24gbnYtc2ExEDAOBgNVBAsTB1Jv
-b3QgQ0ExGzAZBgNVBAMTEkdsb2JhbFNpZ24gUm9vdCBDQTAeFw05ODA5MDExMjAw
-MDBaFw0yODAxMjgxMjAwMDBaMFcxCzAJBgNVBAYTAkJFMRkwFwYDVQQKExBHbG9i
-YWxTaWduIG52LXNhMRAwDgYDVQQLEwdSb290IENBMRswGQYDVQQDExJHbG9iYWxT
-aWduIFJvb3QgQ0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDaDuaZ
-jc6j40+Kfvvxi4Mla+pIH/EqsLmVEQS98GPR4mdmzxzdzxtIK+6NiY6arymAZavp
-xy0Sy6scTHAHoT0KMM0VjU/43dSMUBUc71DuxC73/OlS8pF94G3VNTCOXkNz8kHp
-1Wrjsok6Vjk4bwY8iGlbKk3Fp1S4bInMm/k8yuX9ifUSPJJ4ltbcdG6TRGHRjcdG
-snUOhugZitVtbNV4FpWi6cgKOOvyJBNPc1STE4U6G7weNLWLBYy5d4ux2x8gkasJ
-U26Qzns3dLlwR5EiUWMWea6xrkEmCMgZK9FGqkjWZCrXgzT/LCrBbBlDSgeF59N8
-9iFo7+ryUp9/k5DPAgMBAAGjQjBAMA4GA1UdDwEB/wQEAwIBBjAPBgNVHRMBAf8E
-BTADAQH/MB0GA1UdDgQWBBRge2YaRQ2XyolQL30EzTSo//z9SzANBgkqhkiG9w0B
-AQUFAAOCAQEA1nPnfE920I2/7LqivjTFKDK1fPxsnCwrvQmeU79rXqoRSLblCKOz
-yj1hTdNGCbM+w6DjY1Ub8rrvrTnhQ7k4o+YviiY776BQVvnGCv04zcQLcFGUl5gE
-38NflNUVyRRBnMRddWQVDf9VMOyGj/8N7yy5Y0b2qvzfvGn9LhJIZJrglfCm7ymP
-AbEVtQwdpf5pLGkkeB6zpxxxYu7KyJesF12KwvhHhm4qxFYxldBniYUr+WymXUad
-DKqC5JlR3XC321Y9YeRq4VzW9v493kHMB65jUr9TU/Qr6cf9tveCX4XSQRjbgbME
-HMUfpIBvFSDJ3gyICh3WZlXi/EjJKSZp4A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgILBAAAAAABD4Ym5g0wDQYJKoZIhvcNAQEFBQAwTDEgMB4G
-A1UECxMXR2xvYmFsU2lnbiBSb290IENBIC0gUjIxEzARBgNVBAoTCkdsb2JhbFNp
-Z24xEzARBgNVBAMTCkdsb2JhbFNpZ24wHhcNMDYxMjE1MDgwMDAwWhcNMjExMjE1
-MDgwMDAwWjBMMSAwHgYDVQQLExdHbG9iYWxTaWduIFJvb3QgQ0EgLSBSMjETMBEG
-A1UEChMKR2xvYmFsU2lnbjETMBEGA1UEAxMKR2xvYmFsU2lnbjCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAKbPJA6+Lm8omUVCxKs+IVSbC9N/hHD6ErPL
-v4dfxn+G07IwXNb9rfF73OX4YJYJkhD10FPe+3t+c4isUoh7SqbKSaZeqKeMWhG8
-eoLrvozps6yWJQeXSpkqBy+0Hne/ig+1AnwblrjFuTosvNYSuetZfeLQBoZfXklq
-tTleiDTsvHgMCJiEbKjNS7SgfQx5TfC4LcshytVsW33hoCmEofnTlEnLJGKRILzd
-C9XZzPnqJworc5HGnRusyMvo4KD0L5CLTfuwNhv2GXqF4G3yYROIXJ/gkwpRl4pa
-zq+r1feqCapgvdzZX99yqWATXgAByUr6P6TqBwMhAo6CygPCm48CAwEAAaOBnDCB
-mTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUm+IH
-V2ccHsBqBt5ZtJot39wZhi4wNgYDVR0fBC8wLTAroCmgJ4YlaHR0cDovL2NybC5n
-bG9iYWxzaWduLm5ldC9yb290LXIyLmNybDAfBgNVHSMEGDAWgBSb4gdXZxwewGoG
-3lm0mi3f3BmGLjANBgkqhkiG9w0BAQUFAAOCAQEAmYFThxxol4aR7OBKuEQLq4Gs
-J0/WwbgcQ3izDJr86iw8bmEbTUsp9Z8FHSbBuOmDAGJFtqkIk7mpM0sYmsL4h4hO
-291xNBrBVNpGP+DTKqttVCL1OmLNIG+6KYnX3ZHu01yiPqFbQfXf5WRDLenVOavS
-ot+3i9DAgBkcRcAtjOj4LaR0VknFBbVPFd5uRHg5h6h+u/N5GJG79G+dwfCMNYxd
-AfvDbbnvRG15RjF+Cv6pgsH/76tuIMRQyV+dTZsXjAzlAcmgQWpzU/qlULRuJQ/7
-TBj0/VLZjmmx6BEP3ojY+x1J96relc8geMJgEtslQIxq/H5COEBkEveegeGTLg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEADCCAuigAwIBAgIBADANBgkqhkiG9w0BAQUFADBjMQswCQYDVQQGEwJVUzEh
-MB8GA1UEChMYVGhlIEdvIERhZGR5IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBE
-YWRkeSBDbGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTA0MDYyOTE3
-MDYyMFoXDTM0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRo
-ZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3Mg
-MiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggEN
-ADCCAQgCggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCA
-PVYYYwhv2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6w
-wdhFJ2+qN1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXi
-EqITLdiOr18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMY
-avx4A6lNf4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+
-YihfukEHU1jPEX44dMX4/7VpkI+EdOqXG68CAQOjgcAwgb0wHQYDVR0OBBYEFNLE
-sNKR1EwRcbNhyz2h/t2oatTjMIGNBgNVHSMEgYUwgYKAFNLEsNKR1EwRcbNhyz2h
-/t2oatTjoWekZTBjMQswCQYDVQQGEwJVUzEhMB8GA1UEChMYVGhlIEdvIERhZGR5
-IEdyb3VwLCBJbmMuMTEwLwYDVQQLEyhHbyBEYWRkeSBDbGFzcyAyIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQAD
-ggEBADJL87LKPpH8EsahB4yOd6AzBhRckB4Y9wimPQoZ+YeAEW5p5JYXMP80kWNy
-OO7MHAGjHZQopDH2esRU1/blMVgDoszOYtuURXO1v0XJJLXVggKtI3lpjbi2Tc7P
-TMozI+gciKqdi0FuFskg5YmezTvacPd+mSYgFFQlq25zheabIZ0KbIIOqPjCDPoQ
-HmyW74cNxA9hi63ugyuV+I6ShHI56yDqg+2DzZduCLzrTia2cyvk0/ZM/iZx4mER
-dEr/VxqHD3VILs9RaRegAhJhldXRQLIQTO7ErBBDpqWeCtWVYpoNz4iCxTIM5Cuf
-ReYNnyicsbkqWletNw+vHX/bvZ8=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
-SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
-SVBTIENBIENMQVNFMSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
-DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAwNTkzOFoXDTI1MTIyNzAw
-NTkzOFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
-VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
-IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
-IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTEgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA4FEnpwvdr9G5Q1uCN0VWcu+atsIS7ywS
-zHb5BlmvXSHU0lq4oNTzav3KaY1mSPd05u42veiWkXWmcSjK5yISMmmwPh5r9FBS
-YmL9Yzt9fuzuOOpi9GyocY3h6YvJP8a1zZRCb92CRTzo3wno7wpVqVZHYUxJZHMQ
-KD/Kvwn/xi8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBTrsxl588GlHKzcuh9morKb
-adB4CDCCAUQGA1UdIwSCATswggE3gBTrsxl588GlHKzcuh9morKbadB4CKGCARqk
-ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
-BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
-ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
-LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UxIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
-VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
-BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
-FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
-AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UxIENBIENlcnRp
-ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEuY3JsMD8GCWCG
-SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
-TEFTRTEuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmVuZXdhbENMQVNFMS5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
-L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTEuaHRtbDBzBgNVHR8EbDBq
-MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTEu
-Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
-Q0xBU0UxLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
-Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAK9Dr/drIyllq2tPMMi7JVBuK
-Yn4VLenZMdMu9Ccj/1urxUq2ckCuU3T0vAW0xtnIyXf7t/k0f3gA+Nak5FI/LEpj
-V4F1Wo7ojPsCwJTGKbqz3Bzosq/SLmJbGqmODszFV0VRFOlOHIilkfSj945RyKm+
-hjM+5i9Ibq9UkE6tsSU=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH6jCCB1OgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARIxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEuMCwGA1UECxMl
-SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMl
-SVBTIENBIENMQVNFMyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3
-DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMDE0NFoXDTI1MTIyNzAx
-MDE0NFowggESMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFyY2Vsb25hMRIwEAYD
-VQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5ldCBwdWJsaXNoaW5n
-IFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlwcy5lcyBDLkkuRi4g
-IEItNjA5Mjk0NTIxLjAsBgNVBAsTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxLjAsBgNVBAMTJUlQUyBDQSBDTEFTRTMgQ2VydGlmaWNhdGlv
-biBBdXRob3JpdHkxHjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAqxf+DrDGaBtT8FK+n/ra+osTBLsBjzLZ
-H49NzjaY2uQARIwo2BNEKqRrThckQpzTiKRBgtYj+4vJhuW5qYIF3PHeH+AMmVWY
-8jjsbJ0gA8DvqqPGZARRLXgNo9KoOtYkTOmWehisEyMiG3zoMRGzXwmqMHBxRiVr
-SXGAK5UBsh8CAwEAAaOCBEowggRGMB0GA1UdDgQWBBS4k/8uy9wsjqLnev42USGj
-mFsMNDCCAUQGA1UdIwSCATswggE3gBS4k/8uy9wsjqLnev42USGjmFsMNKGCARqk
-ggEWMIIBEjELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNlbG9uYTESMBAGA1UE
-BxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQgcHVibGlzaGluZyBT
-ZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMuZXMgQy5JLkYuICBC
-LTYwOTI5NDUyMS4wLAYDVQQLEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MS4wLAYDVQQDEyVJUFMgQ0EgQ0xBU0UzIENlcnRpZmljYXRpb24g
-QXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYD
-VR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggr
-BgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIB
-FQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhC
-AQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGB
-D2lwc0BtYWlsLmlwcy5lczBBBglghkgBhvhCAQ0ENBYyQ0xBU0UzIENBIENlcnRp
-ZmljYXRlIGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgEC
-BBwWGmh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMDoGCWCGSAGG+EIBBAQtFito
-dHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMuY3JsMD8GCWCG
-SAGG+EIBAwQyFjBodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25D
-TEFTRTMuaHRtbD8wPAYJYIZIAYb4QgEHBC8WLWh0dHA6Ly93d3cuaXBzLmVzL2lw
-czIwMDIvcmVuZXdhbENMQVNFMy5odG1sPzA6BglghkgBhvhCAQgELRYraHR0cDov
-L3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lDTEFTRTMuaHRtbDBzBgNVHR8EbDBq
-MDGgL6AthitodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJDTEFTRTMu
-Y3JsMDWgM6Axhi9odHRwOi8vd3d3YmFjay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAy
-Q0xBU0UzLmNybDAvBggrBgEFBQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9v
-Y3NwLmlwcy5lcy8wDQYJKoZIhvcNAQEFBQADgYEAF2VcmZVDAyevJuXr0LMXI/dD
-qsfwfewPxqmurpYPdikc4gYtfibFPPqhwYHOU7BC0ZdXGhd+pFFhxu7pXu8Fuuu9
-D6eSb9ijBmgpjnn1/7/5p6/ksc7C0YBCJwUENPjDfxZ4IwwHJPJGR607VNCv1TGy
-r33I6unUVtkOE7LFRVA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
-SVBTIENBIENMQVNFQTEgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUExIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNTMyWhcNMjUxMjI3
-MDEwNTMyWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALsw19zQVL01Tp/FTILq0VA8R5j8
-m2mdd81u4D/u6zJfX5/S0HnllXNEITLgCtud186Nq1KLK3jgm1t99P1tCeWu4Wwd
-ByOgF9H5fahGRpEiqLJpxq339fWUoTCUvQDMRH/uxJ7JweaPCjbB/SQ9AaD1e+J8
-eGZDi09Z8pvZ+kmzAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUZyaW56G/2LUDnf47
-3P7yiuYV3TAwggFGBgNVHSMEggE9MIIBOYAUZyaW56G/2LUDnf473P7yiuYV3TCh
-ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTEgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUExIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
-AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
-BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
-BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
-hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
-EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMSBD
-QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
-AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMS5j
-cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
-b2NhdGlvbkNMQVNFQTEuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
-aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTEuaHRtbD8wOwYJYIZIAYb4QgEI
-BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMS5odG1s
-MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
-MjAwMkNMQVNFQTEuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0xBU0VBMS5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAH66iqyA
-AIQVCtWYUQxkxZwCWINmyq0eB81+atqAB98DNEock8RLWCA1NnHtogo1EqWmZaeF
-aQoO42Hu6r4okzPV7Oi+xNtff6j5YzHIa5biKcJboOeXNp13XjFr/tOn2yrb25aL
-H2betgPAK7N41lUH5Y85UN4HI3LmvSAUS7SG
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARQxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEvMC0GA1UECxMm
-SVBTIENBIENMQVNFQTMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxLzAtBgNVBAMT
-JklQUyBDQSBDTEFTRUEzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMwHhcNMDExMjI5MDEwNzUwWhcNMjUxMjI3
-MDEwNzUwWjCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXMw
-gZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAO6AAPYaZC6tasiDsYun7o/ZttvN
-G7uGBiJ2MwwSbUhWYdLcgiViL5/SaTBlA0IjWLxH3GvWdV0XPOH/8lhneaDBgbHU
-VqLyjRGZ/fZ98cfEXgIqmuJKtROKAP2Md4bm15T1IHUuDky/dMQ/gT6DtKM4Ninn
-6Cr1jIhBqoCm42zvAgMBAAGjggRTMIIETzAdBgNVHQ4EFgQUHp9XUEe2YZM50yz8
-2l09BXW3mQIwggFGBgNVHSMEggE9MIIBOYAUHp9XUEe2YZM50yz82l09BXW3mQKh
-ggEcpIIBGDCCARQxCzAJBgNVBAYTAkVTMRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQ
-BgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UEChMlSVBTIEludGVybmV0IHB1Ymxpc2hp
-bmcgU2VydmljZXMgcy5sLjErMCkGA1UEChQiaXBzQG1haWwuaXBzLmVzIEMuSS5G
-LiAgQi02MDkyOTQ1MjEvMC0GA1UECxMmSVBTIENBIENMQVNFQTMgQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkxLzAtBgNVBAMTJklQUyBDQSBDTEFTRUEzIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MR4wHAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOC
-AQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUF
-BwMBBggrBgEFBQcDAgYIKwYBBQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYB
-BAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglg
-hkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1Ud
-EgQTMBGBD2lwc0BtYWlsLmlwcy5lczBCBglghkgBhvhCAQ0ENRYzQ0xBU0VBMyBD
-QSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkgaHR0cDovL3d3dy5pcHMuZXMvMCkGCWCG
-SAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyLzA7BglghkgBhvhC
-AQQELhYsaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyQ0xBU0VBMy5j
-cmwwQAYJYIZIAYb4QgEDBDMWMWh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcmV2
-b2NhdGlvbkNMQVNFQTMuaHRtbD8wPQYJYIZIAYb4QgEHBDAWLmh0dHA6Ly93d3cu
-aXBzLmVzL2lwczIwMDIvcmVuZXdhbENMQVNFQTMuaHRtbD8wOwYJYIZIAYb4QgEI
-BC4WLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5Q0xBU0VBMy5odG1s
-MHUGA1UdHwRuMGwwMqAwoC6GLGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvaXBz
-MjAwMkNMQVNFQTMuY3JsMDagNKAyhjBodHRwOi8vd3d3YmFjay5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0xBU0VBMy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAEo9IEca
-2on0eisxeewBwMwB9dbB/MjD81ACUZBYKp/nNQlbMAqBACVHr9QPDp5gJqiVp4MI
-3y2s6Q73nMify5NF8bpqxmdRSmlPa/59Cy9SKcJQrSRE7SOzSMtEQMEDlQwKeAYS
-AfWRMS1Jjbs/RU4s4OjNtckUFQzjB4ObJnXv
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIH9zCCB2CgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCARwxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjEzMDEGA1UECxMq
-SVBTIENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTMwMQYD
-VQQDEypJUFMgQ0EgQ2hhaW5lZCBDQXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkx
-HjAcBgkqhkiG9w0BCQEWD2lwc0BtYWlsLmlwcy5lczAeFw0wMTEyMjkwMDUzNTha
-Fw0yNTEyMjcwMDUzNThaMIIBHDELMAkGA1UEBhMCRVMxEjAQBgNVBAgTCUJhcmNl
-bG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJUFMgSW50ZXJuZXQg
-cHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJpcHNAbWFpbC5pcHMu
-ZXMgQy5JLkYuICBCLTYwOTI5NDUyMTMwMQYDVQQLEypJUFMgQ0EgQ2hhaW5lZCBD
-QXMgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxMzAxBgNVBAMTKklQUyBDQSBDaGFp
-bmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEeMBwGCSqGSIb3DQEJARYP
-aXBzQG1haWwuaXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDcVpJJ
-spQgvJhPUOtopKdJC7/SMejHT8KGC/po/UNaivNgkjWZOLtNA1IhW/A3mTXhQSCB
-hYEFcYGdtJUZqV92NC5jNzVXjrQfQj8VXOF6wV8TGDIxya2+o8eDZh65nAQTy2nB
-Bt4wBrszo7Uf8I9vzv+W6FS+ZoCua9tBhDaiPQIDAQABo4IEQzCCBD8wHQYDVR0O
-BBYEFKGtMbH5PuEXpsirNPxShwkeYlJBMIIBTgYDVR0jBIIBRTCCAUGAFKGtMbH5
-PuEXpsirNPxShwkeYlJBoYIBJKSCASAwggEcMQswCQYDVQQGEwJFUzESMBAGA1UE
-CBMJQmFyY2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJ
-bnRlcm5ldCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0Bt
-YWlsLmlwcy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxMzAxBgNVBAsTKklQUyBDQSBD
-aGFpbmVkIENBcyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEzMDEGA1UEAxMqSVBT
-IENBIENoYWluZWQgQ0FzIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4wHAYJKoZI
-hvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAMBgNVHQ8E
-BQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYBBQUHAwMG
-CCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIBFgYKKwYB
-BAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYDVR0RBBMw
-EYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlwcy5lczBC
-BglghkgBhvhCAQ0ENRYzQ2hhaW5lZCBDQSBDZXJ0aWZpY2F0ZSBpc3N1ZWQgYnkg
-aHR0cDovL3d3dy5pcHMuZXMvMCkGCWCGSAGG+EIBAgQcFhpodHRwOi8vd3d3Lmlw
-cy5lcy9pcHMyMDAyLzA3BglghkgBhvhCAQQEKhYoaHR0cDovL3d3dy5pcHMuZXMv
-aXBzMjAwMi9pcHMyMDAyQ0FDLmNybDA8BglghkgBhvhCAQMELxYtaHR0cDovL3d3
-dy5pcHMuZXMvaXBzMjAwMi9yZXZvY2F0aW9uQ0FDLmh0bWw/MDkGCWCGSAGG+EIB
-BwQsFipodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3JlbmV3YWxDQUMuaHRtbD8w
-NwYJYIZIAYb4QgEIBCoWKGh0dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvcG9saWN5
-Q0FDLmh0bWwwbQYDVR0fBGYwZDAuoCygKoYoaHR0cDovL3d3dy5pcHMuZXMvaXBz
-MjAwMi9pcHMyMDAyQ0FDLmNybDAyoDCgLoYsaHR0cDovL3d3d2JhY2suaXBzLmVz
-L2lwczIwMDIvaXBzMjAwMkNBQy5jcmwwLwYIKwYBBQUHAQEEIzAhMB8GCCsGAQUF
-BzABhhNodHRwOi8vb2NzcC5pcHMuZXMvMA0GCSqGSIb3DQEBBQUAA4GBAERyMJ1W
-WKJBGyi3leGmGpVfp3hAK+/blkr8THFj2XOVvQLiogbHvpcqk4A0hgP63Ng9HgfN
-HnNDJGD1HWHc3JagvPsd4+cSACczAsDAK1M92GsDgaPb1pOVIO/Tln4mkImcJpvN
-b2ar7QMiRDjMWb2f2/YHogF/JsRj9SVCXmK9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICtzCCAiACAQAwDQYJKoZIhvcNAQEEBQAwgaMxCzAJBgNVBAYTAkVTMRIwEAYD
-VQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UEChMQSVBT
-IFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcwFQYDVQQD
-Ew5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVz
-MB4XDTk4MDEwMTIzMjEwN1oXDTA5MTIyOTIzMjEwN1owgaMxCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCQVJDRUxPTkExEjAQBgNVBAcTCUJBUkNFTE9OQTEZMBcGA1UE
-ChMQSVBTIFNlZ3VyaWRhZCBDQTEYMBYGA1UECxMPQ2VydGlmaWNhY2lvbmVzMRcw
-FQYDVQQDEw5JUFMgU0VSVklET1JFUzEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwu
-aXBzLmVzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCsT1J0nznqjtwlxLyY
-XZhkJAk8IbPMGbWOlI6H0fg3PqHILVikgDVboXVsHUUMH2Fjal5vmwpMwci4YSM1
-gf/+rHhwLWjhOgeYlQJU3c0jt4BT18g3RXIGJBK6E2Ehim51KODFDzT9NthFf+G4
-Nu+z4cYgjui0OLzhPvYR3oydAQIDAQABMA0GCSqGSIb3DQEBBAUAA4GBACzzw3lY
-JN7GO9HgQmm47mSzPWIBubOE3yN93ZjPEKn+ANgilgUTB1RXxafey9m4iEL2mdsU
-dx+2/iU94aI+A6mB0i1sR/WWRowiq8jMDQ6XXotBtDvECgZAHd1G9AHduoIuPD14
-cJ58GNCr+Lh3B0Zx8coLY1xq+XKU1QFPoNtC
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIIODCCB6GgAwIBAgIBADANBgkqhkiG9w0BAQUFADCCAR4xCzAJBgNVBAYTAkVT
-MRIwEAYDVQQIEwlCYXJjZWxvbmExEjAQBgNVBAcTCUJhcmNlbG9uYTEuMCwGA1UE
-ChMlSVBTIEludGVybmV0IHB1Ymxpc2hpbmcgU2VydmljZXMgcy5sLjErMCkGA1UE
-ChQiaXBzQG1haWwuaXBzLmVzIEMuSS5GLiAgQi02MDkyOTQ1MjE0MDIGA1UECxMr
-SVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTE0MDIG
-A1UEAxMrSVBTIENBIFRpbWVzdGFtcGluZyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eTEeMBwGCSqGSIb3DQEJARYPaXBzQG1haWwuaXBzLmVzMB4XDTAxMTIyOTAxMTAx
-OFoXDTI1MTIyNzAxMTAxOFowggEeMQswCQYDVQQGEwJFUzESMBAGA1UECBMJQmFy
-Y2Vsb25hMRIwEAYDVQQHEwlCYXJjZWxvbmExLjAsBgNVBAoTJUlQUyBJbnRlcm5l
-dCBwdWJsaXNoaW5nIFNlcnZpY2VzIHMubC4xKzApBgNVBAoUImlwc0BtYWlsLmlw
-cy5lcyBDLkkuRi4gIEItNjA5Mjk0NTIxNDAyBgNVBAsTK0lQUyBDQSBUaW1lc3Rh
-bXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxNDAyBgNVBAMTK0lQUyBDQSBU
-aW1lc3RhbXBpbmcgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxHjAcBgkqhkiG9w0B
-CQEWD2lwc0BtYWlsLmlwcy5lczCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA
-vLjuVqWajOY2ycJioGaBjRrVetJznw6EZLqVtJCneK/K/lRhW86yIFcBrkSSQxA4
-Efdo/BdApWgnMjvEp+ZCccWZ73b/K5Uk9UmSGGjKALWkWi9uy9YbLA1UZ2t6KaFY
-q6JaANZbuxjC3/YeE1Z2m6Vo4pjOxgOKNNtMg0GmqaMCAwEAAaOCBIAwggR8MB0G
-A1UdDgQWBBSL0BBQCYHynQnVDmB4AyKiP8jKZjCCAVAGA1UdIwSCAUcwggFDgBSL
-0BBQCYHynQnVDmB4AyKiP8jKZqGCASakggEiMIIBHjELMAkGA1UEBhMCRVMxEjAQ
-BgNVBAgTCUJhcmNlbG9uYTESMBAGA1UEBxMJQmFyY2Vsb25hMS4wLAYDVQQKEyVJ
-UFMgSW50ZXJuZXQgcHVibGlzaGluZyBTZXJ2aWNlcyBzLmwuMSswKQYDVQQKFCJp
-cHNAbWFpbC5pcHMuZXMgQy5JLkYuICBCLTYwOTI5NDUyMTQwMgYDVQQLEytJUFMg
-Q0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MTQwMgYDVQQD
-EytJUFMgQ0EgVGltZXN0YW1waW5nIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MR4w
-HAYJKoZIhvcNAQkBFg9pcHNAbWFpbC5pcHMuZXOCAQAwDAYDVR0TBAUwAwEB/zAM
-BgNVHQ8EBQMDB/+AMGsGA1UdJQRkMGIGCCsGAQUFBwMBBggrBgEFBQcDAgYIKwYB
-BQUHAwMGCCsGAQUFBwMEBggrBgEFBQcDCAYKKwYBBAGCNwIBFQYKKwYBBAGCNwIB
-FgYKKwYBBAGCNwoDAQYKKwYBBAGCNwoDBDARBglghkgBhvhCAQEEBAMCAAcwGgYD
-VR0RBBMwEYEPaXBzQG1haWwuaXBzLmVzMBoGA1UdEgQTMBGBD2lwc0BtYWlsLmlw
-cy5lczBHBglghkgBhvhCAQ0EOhY4VGltZXN0YW1waW5nIENBIENlcnRpZmljYXRl
-IGlzc3VlZCBieSBodHRwOi8vd3d3Lmlwcy5lcy8wKQYJYIZIAYb4QgECBBwWGmh0
-dHA6Ly93d3cuaXBzLmVzL2lwczIwMDIvMEAGCWCGSAGG+EIBBAQzFjFodHRwOi8v
-d3d3Lmlwcy5lcy9pcHMyMDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMEUGCWCG
-SAGG+EIBAwQ4FjZodHRwOi8vd3d3Lmlwcy5lcy9pcHMyMDAyL3Jldm9jYXRpb25U
-aW1lc3RhbXBpbmcuaHRtbD8wQgYJYIZIAYb4QgEHBDUWM2h0dHA6Ly93d3cuaXBz
-LmVzL2lwczIwMDIvcmVuZXdhbFRpbWVzdGFtcGluZy5odG1sPzBABglghkgBhvhC
-AQgEMxYxaHR0cDovL3d3dy5pcHMuZXMvaXBzMjAwMi9wb2xpY3lUaW1lc3RhbXBp
-bmcuaHRtbDB/BgNVHR8EeDB2MDegNaAzhjFodHRwOi8vd3d3Lmlwcy5lcy9pcHMy
-MDAyL2lwczIwMDJUaW1lc3RhbXBpbmcuY3JsMDugOaA3hjVodHRwOi8vd3d3YmFj
-ay5pcHMuZXMvaXBzMjAwMi9pcHMyMDAyVGltZXN0YW1waW5nLmNybDAvBggrBgEF
-BQcBAQQjMCEwHwYIKwYBBQUHMAGGE2h0dHA6Ly9vY3NwLmlwcy5lcy8wDQYJKoZI
-hvcNAQEFBQADgYEAZbrBzAAalZHK6Ww6vzoeFAh8+4Pua2JR0zORtWB5fgTYXXk3
-6MNbsMRnLWhasl8OCvrNPzpFoeo2zyYepxEoxZSPhExTCMWTs/zif/WN87GphV+I
-3pGW7hdbrqXqcGV4LCFkAZXOzkw+UPS2Wctjjba9GNSHSl/c7+lW8AoM6HU=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFSzCCBLSgAwIBAgIBaTANBgkqhkiG9w0BAQQFADCBmTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTIwMAYDVQQD
-EylOZXRMb2NrIFV6bGV0aSAoQ2xhc3MgQikgVGFudXNpdHZhbnlraWFkbzAeFw05
-OTAyMjUxNDEwMjJaFw0xOTAyMjAxNDEwMjJaMIGZMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxMjAwBgNVBAMTKU5l
-dExvY2sgVXpsZXRpIChDbGFzcyBCKSBUYW51c2l0dmFueWtpYWRvMIGfMA0GCSqG
-SIb3DQEBAQUAA4GNADCBiQKBgQCx6gTsIKAjwo84YM/HRrPVG/77uZmeBNwcf4xK
-gZjupNTKihe5In+DCnVMm8Bp2GQ5o+2So/1bXHQawEfKOml2mrriRBf8TKPV/riX
-iK+IA4kfpPIEPsgHC+b5sy96YhQJRhTKZPWLgLViqNhr1nGTLbO/CVRY7QbrqHvc
-Q7GhaQIDAQABo4ICnzCCApswEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8E
-BAMCAAYwEQYJYIZIAYb4QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1G
-SUdZRUxFTSEgRXplbiB0YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFu
-b3MgU3pvbGdhbHRhdGFzaSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBh
-bGFwamFuIGtlc3p1bHQuIEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExv
-Y2sgS2Z0LiB0ZXJtZWtmZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGln
-aXRhbGlzIGFsYWlyYXMgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0
-IGVsbGVub3J6ZXNpIGVsamFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJh
-c2EgbWVndGFsYWxoYXRvIGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGph
-biBhIGh0dHBzOi8vd3d3Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJo
-ZXRvIGF6IGVsbGVub3J6ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBP
-UlRBTlQhIFRoZSBpc3N1YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmlj
-YXRlIGlzIHN1YmplY3QgdG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBo
-dHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNA
-bmV0bG9jay5uZXQuMA0GCSqGSIb3DQEBBAUAA4GBAATbrowXr/gOkDFOzT4JwG06
-sPgzTEdM43WIEJessDgVkcYplswhwG08pXTP2IKlOcNl40JwuyKQ433bNXbhoLXa
-n3BukxowOR0w2y7jfLKRstE3Kfq51hdcR0/jHTjrn9V7lagonhVK0dHQKwCXoOKS
-NitjrFgBazMpUIaD8QFI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFTzCCBLigAwIBAgIBaDANBgkqhkiG9w0BAQQFADCBmzELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMTQwMgYDVQQD
-EytOZXRMb2NrIEV4cHJlc3N6IChDbGFzcyBDKSBUYW51c2l0dmFueWtpYWRvMB4X
-DTk5MDIyNTE0MDgxMVoXDTE5MDIyMDE0MDgxMVowgZsxCzAJBgNVBAYTAkhVMREw
-DwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9u
-c2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE0MDIGA1UEAxMr
-TmV0TG9jayBFeHByZXNzeiAoQ2xhc3MgQykgVGFudXNpdHZhbnlraWFkbzCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA6+ywbGGKIyWvYCDj2Z/8kwvbXY2wobNA
-OoLO/XXgeDIDhlqGlZHtU/qdQPzm6N3ZW3oDvV3zOwzDUXmbrVWg6dADEK8KuhRC
-2VImESLH0iDMgqSaqf64gXadarfSNnU+sYYJ9m5tfk63euyucYT2BDMIJTLrdKwW
-RMbkQJMdf60CAwEAAaOCAp8wggKbMBIGA1UdEwEB/wQIMAYBAf8CAQQwDgYDVR0P
-AQH/BAQDAgAGMBEGCWCGSAGG+EIBAQQEAwIABzCCAmAGCWCGSAGG+EIBDQSCAlEW
-ggJNRklHWUVMRU0hIEV6ZW4gdGFudXNpdHZhbnkgYSBOZXRMb2NrIEtmdC4gQWx0
-YWxhbm9zIFN6b2xnYWx0YXRhc2kgRmVsdGV0ZWxlaWJlbiBsZWlydCBlbGphcmFz
-b2sgYWxhcGphbiBrZXN6dWx0LiBBIGhpdGVsZXNpdGVzIGZvbHlhbWF0YXQgYSBO
-ZXRMb2NrIEtmdC4gdGVybWVrZmVsZWxvc3NlZy1iaXp0b3NpdGFzYSB2ZWRpLiBB
-IGRpZ2l0YWxpcyBhbGFpcmFzIGVsZm9nYWRhc2FuYWsgZmVsdGV0ZWxlIGF6IGVs
-b2lydCBlbGxlbm9yemVzaSBlbGphcmFzIG1lZ3RldGVsZS4gQXogZWxqYXJhcyBs
-ZWlyYXNhIG1lZ3RhbGFsaGF0byBhIE5ldExvY2sgS2Z0LiBJbnRlcm5ldCBob25s
-YXBqYW4gYSBodHRwczovL3d3dy5uZXRsb2NrLm5ldC9kb2NzIGNpbWVuIHZhZ3kg
-a2VyaGV0byBheiBlbGxlbm9yemVzQG5ldGxvY2submV0IGUtbWFpbCBjaW1lbi4g
-SU1QT1JUQU5UISBUaGUgaXNzdWFuY2UgYW5kIHRoZSB1c2Ugb2YgdGhpcyBjZXJ0
-aWZpY2F0ZSBpcyBzdWJqZWN0IHRvIHRoZSBOZXRMb2NrIENQUyBhdmFpbGFibGUg
-YXQgaHR0cHM6Ly93d3cubmV0bG9jay5uZXQvZG9jcyBvciBieSBlLW1haWwgYXQg
-Y3BzQG5ldGxvY2submV0LjANBgkqhkiG9w0BAQQFAAOBgQAQrX/XDDKACtiG8XmY
-ta3UzbM2xJZIwVzNmtkFLp++UOv0JhQQLdRmF/iewSf98e3ke0ugbLWrmldwpu2g
-pO0u9f38vf5NNwgMvOOWgyL1SRt/Syu0VMGAfJlOHdCM7tCs5ZL6dVb+ZKATj7i4
-Fp1hBWeAyNDYpQcCNJgEjTME1A==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGfTCCBWWgAwIBAgICAQMwDQYJKoZIhvcNAQEEBQAwga8xCzAJBgNVBAYTAkhV
-MRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhCdWRhcGVzdDEnMCUGA1UEChMe
-TmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQuMRowGAYDVQQLExFUYW51c2l0
-dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBLb3pqZWd5em9pIChDbGFzcyBB
-KSBUYW51c2l0dmFueWtpYWRvMB4XDTk5MDIyNDIzMTQ0N1oXDTE5MDIxOTIzMTQ0
-N1owga8xCzAJBgNVBAYTAkhVMRAwDgYDVQQIEwdIdW5nYXJ5MREwDwYDVQQHEwhC
-dWRhcGVzdDEnMCUGA1UEChMeTmV0TG9jayBIYWxvemF0Yml6dG9uc2FnaSBLZnQu
-MRowGAYDVQQLExFUYW51c2l0dmFueWtpYWRvazE2MDQGA1UEAxMtTmV0TG9jayBL
-b3pqZWd5em9pIChDbGFzcyBBKSBUYW51c2l0dmFueWtpYWRvMIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvHSMD7tM9DceqQWC2ObhbHDqeLVu0ThEDaiD
-zl3S1tWBxdRL51uUcCbbO51qTGL3cfNk1mE7PetzozfZz+qMkjvN9wfcZnSX9EUi
-3fRc4L9t875lM+QVOr/bmJBVOMTtplVjC7B4BPTjbsE/jvxReB+SnoPC/tmwqcm8
-WgD/qaiYdPv2LD4VOQ22BFWoDpggQrOxJa1+mm9dU7GrDPzr4PN6s6iz/0b2Y6LY
-Oph7tqyF/7AlT3Rj5xMHpQqPBffAZG9+pyeAlt7ULoZgx2srXnN7F+eRP2QM2Esi
-NCubMvJIH5+hCoR64sKtlz2O1cH5VqNQ6ca0+pii7pXmKgOM3wIDAQABo4ICnzCC
-ApswDgYDVR0PAQH/BAQDAgAGMBIGA1UdEwEB/wQIMAYBAf8CAQQwEQYJYIZIAYb4
-QgEBBAQDAgAHMIICYAYJYIZIAYb4QgENBIICURaCAk1GSUdZRUxFTSEgRXplbiB0
-YW51c2l0dmFueSBhIE5ldExvY2sgS2Z0LiBBbHRhbGFub3MgU3pvbGdhbHRhdGFz
-aSBGZWx0ZXRlbGVpYmVuIGxlaXJ0IGVsamFyYXNvayBhbGFwamFuIGtlc3p1bHQu
-IEEgaGl0ZWxlc2l0ZXMgZm9seWFtYXRhdCBhIE5ldExvY2sgS2Z0LiB0ZXJtZWtm
-ZWxlbG9zc2VnLWJpenRvc2l0YXNhIHZlZGkuIEEgZGlnaXRhbGlzIGFsYWlyYXMg
-ZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYXogZWxvaXJ0IGVsbGVub3J6ZXNpIGVs
-amFyYXMgbWVndGV0ZWxlLiBBeiBlbGphcmFzIGxlaXJhc2EgbWVndGFsYWxoYXRv
-IGEgTmV0TG9jayBLZnQuIEludGVybmV0IGhvbmxhcGphbiBhIGh0dHBzOi8vd3d3
-Lm5ldGxvY2submV0L2RvY3MgY2ltZW4gdmFneSBrZXJoZXRvIGF6IGVsbGVub3J6
-ZXNAbmV0bG9jay5uZXQgZS1tYWlsIGNpbWVuLiBJTVBPUlRBTlQhIFRoZSBpc3N1
-YW5jZSBhbmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGlzIHN1YmplY3Qg
-dG8gdGhlIE5ldExvY2sgQ1BTIGF2YWlsYWJsZSBhdCBodHRwczovL3d3dy5uZXRs
-b2NrLm5ldC9kb2NzIG9yIGJ5IGUtbWFpbCBhdCBjcHNAbmV0bG9jay5uZXQuMA0G
-CSqGSIb3DQEBBAUAA4IBAQBIJEb3ulZv+sgoA0BO5TE5ayZrU3/b39/zcT0mwBQO
-xmd7I6gMc90Bu8bKbjc5VdXHjFYgDigKDtIqpLBJUsY4B/6+CgmM0ZjPytoUMaFP
-0jn8DxEsQ8Pdq5PHVT5HfBgaANzze9jyf1JsIPQLX2lS9O74silg6+NJMSEN1rUQ
-QeJBCWziGppWS3cC9qCbmieH6FUpccKQn0V4GuEVZD3QDtigdp+uxdAu6tYPVuxk
-f1qbFFgBJ34TUMdrKuZoPL9coAob4Q566eKAw+np9v1sEZ7Q5SgnK1QyQhSCdeZK
-8CtmdWOMovsEPoMOmzbwGOQmIMOM8CgHrTwXZoi1/baI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIG0TCCBbmgAwIBAgIBezANBgkqhkiG9w0BAQUFADCByTELMAkGA1UEBhMCSFUx
-ETAPBgNVBAcTCEJ1ZGFwZXN0MScwJQYDVQQKEx5OZXRMb2NrIEhhbG96YXRiaXp0
-b25zYWdpIEtmdC4xGjAYBgNVBAsTEVRhbnVzaXR2YW55a2lhZG9rMUIwQAYDVQQD
-EzlOZXRMb2NrIE1pbm9zaXRldHQgS296amVneXpvaSAoQ2xhc3MgUUEpIFRhbnVz
-aXR2YW55a2lhZG8xHjAcBgkqhkiG9w0BCQEWD2luZm9AbmV0bG9jay5odTAeFw0w
-MzAzMzAwMTQ3MTFaFw0yMjEyMTUwMTQ3MTFaMIHJMQswCQYDVQQGEwJIVTERMA8G
-A1UEBxMIQnVkYXBlc3QxJzAlBgNVBAoTHk5ldExvY2sgSGFsb3phdGJpenRvbnNh
-Z2kgS2Z0LjEaMBgGA1UECxMRVGFudXNpdHZhbnlraWFkb2sxQjBABgNVBAMTOU5l
-dExvY2sgTWlub3NpdGV0dCBLb3pqZWd5em9pIChDbGFzcyBRQSkgVGFudXNpdHZh
-bnlraWFkbzEeMBwGCSqGSIb3DQEJARYPaW5mb0BuZXRsb2NrLmh1MIIBIjANBgkq
-hkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx1Ilstg91IRVCacbvWy5FPSKAtt2/Goq
-eKvld/Bu4IwjZ9ulZJm53QE+b+8tmjwi8F3JV6BVQX/yQ15YglMxZc4e8ia6AFQe
-r7C8HORSjKAyr7c3sVNnaHRnUPYtLmTeriZ539+Zhqurf4XsoPuAzPS4DB6TRWO5
-3Lhbm+1bOdRfYrCnjnxmOCyqsQhjF2d9zL2z8cM/z1A57dEZgxXbhxInlrfa6uWd
-vLrqOU+L73Sa58XQ0uqGURzk/mQIKAR5BevKxXEOC++r6uwSEaEYBTJp0QwsGj0l
-mT+1fMptsK6ZmfoIYOcZwvK9UdPM0wKswREMgM6r3JSda6M5UzrWhQIDAMV9o4IC
-wDCCArwwEgYDVR0TAQH/BAgwBgEB/wIBBDAOBgNVHQ8BAf8EBAMCAQYwggJ1Bglg
-hkgBhvhCAQ0EggJmFoICYkZJR1lFTEVNISBFemVuIHRhbnVzaXR2YW55IGEgTmV0
-TG9jayBLZnQuIE1pbm9zaXRldHQgU3pvbGdhbHRhdGFzaSBTemFiYWx5emF0YWJh
-biBsZWlydCBlbGphcmFzb2sgYWxhcGphbiBrZXN6dWx0LiBBIG1pbm9zaXRldHQg
-ZWxla3Ryb25pa3VzIGFsYWlyYXMgam9naGF0YXMgZXJ2ZW55ZXN1bGVzZW5laywg
-dmFsYW1pbnQgZWxmb2dhZGFzYW5hayBmZWx0ZXRlbGUgYSBNaW5vc2l0ZXR0IFN6
-b2xnYWx0YXRhc2kgU3phYmFseXphdGJhbiwgYXogQWx0YWxhbm9zIFN6ZXJ6b2Rl
-c2kgRmVsdGV0ZWxla2JlbiBlbG9pcnQgZWxsZW5vcnplc2kgZWxqYXJhcyBtZWd0
-ZXRlbGUuIEEgZG9rdW1lbnR1bW9rIG1lZ3RhbGFsaGF0b2sgYSBodHRwczovL3d3
-dy5uZXRsb2NrLmh1L2RvY3MvIGNpbWVuIHZhZ3kga2VyaGV0b2sgYXogaW5mb0Bu
-ZXRsb2NrLm5ldCBlLW1haWwgY2ltZW4uIFdBUk5JTkchIFRoZSBpc3N1YW5jZSBh
-bmQgdGhlIHVzZSBvZiB0aGlzIGNlcnRpZmljYXRlIGFyZSBzdWJqZWN0IHRvIHRo
-ZSBOZXRMb2NrIFF1YWxpZmllZCBDUFMgYXZhaWxhYmxlIGF0IGh0dHBzOi8vd3d3
-Lm5ldGxvY2suaHUvZG9jcy8gb3IgYnkgZS1tYWlsIGF0IGluZm9AbmV0bG9jay5u
-ZXQwHQYDVR0OBBYEFAlqYhaSsFq7VQ7LdTI6MuWyIckoMA0GCSqGSIb3DQEBBQUA
-A4IBAQCRalCc23iBmz+LQuM7/KbD7kPgz/PigDVJRXYC4uMvBcXxKufAQTPGtpvQ
-MznNwNuhrWw3AkxYQTvyl5LGSKjN5Yo5iWH5Upfpvfb5lHTocQ68d4bDBsxafEp+
-NFAwLvt/MpqNPfMgW/hqyobzMUwsWYACff44yTB1HLdV47yfuqhthCgFdbOLDcCR
-VCHnpgu0mfVRQdzNo0ci2ccBgcTcR08m6h/t280NmPSjnLRzMkqWmf68f8glWPhY
-83ZmiVSkpj7EUFy6iRiCdUgh0k8T6GB+B3bbELVR5qq5aKrN9p2QdRLqOBrKROi3
-macqaJVmlaut74nLYKkGEsaUR+ko
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5jCCAs6gAwIBAgIQV8szb8JcFuZHFhfjkDFo4DANBgkqhkiG9w0BAQUFADBi
-MQswCQYDVQQGEwJVUzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMu
-MTAwLgYDVQQDEydOZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3Jp
-dHkwHhcNMDYxMjAxMDAwMDAwWhcNMjkxMjMxMjM1OTU5WjBiMQswCQYDVQQGEwJV
-UzEhMB8GA1UEChMYTmV0d29yayBTb2x1dGlvbnMgTC5MLkMuMTAwLgYDVQQDEydO
-ZXR3b3JrIFNvbHV0aW9ucyBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkvH6SMG3G2I4rC7xGzuAnlt7e+foS0zwz
-c7MEL7xxjOWftiJgPl9dzgn/ggwbmlFQGiaJ3dVhXRncEg8tCqJDXRfQNJIg6nPP
-OCwGJgl6cvf6UDL4wpPTaaIjzkGxzOTVHzbRijr4jGPiFFlp7Q3Tf2vouAPlT2rl
-mGNpSAW+Lv8ztumXWWn4Zxmuk2GWRBXTcrA/vGp97Eh/jcOrqnErU2lBUzS1sLnF
-BgrEsEX1QV1uiUV7PTsmjHTC5dLRfbIR1PtYMiKagMnc/Qzpf14Dl847ABSHJ3A4
-qY5usyd2mFHgBeMhqxrVhSI8KbWaFsWAqPS7azCPL0YCorEMIuDTAgMBAAGjgZcw
-gZQwHQYDVR0OBBYEFCEwyfsA106Y2oeqKtCnLrFAMadMMA4GA1UdDwEB/wQEAwIB
-BjAPBgNVHRMBAf8EBTADAQH/MFIGA1UdHwRLMEkwR6BFoEOGQWh0dHA6Ly9jcmwu
-bmV0c29sc3NsLmNvbS9OZXR3b3JrU29sdXRpb25zQ2VydGlmaWNhdGVBdXRob3Jp
-dHkuY3JsMA0GCSqGSIb3DQEBBQUAA4IBAQC7rkvnt1frf6ott3NHhWrB5KUd5Oc8
-6fRZZXe1eltajSU24HqXLjjAV2CDmAaDn7l2em5Q4LqILPxFzBiwmZVRDuwduIj/
-h1AcgsLj4DKAv6ALR8jDMe+ZZzKATxcheQxpXN5eNK4CtSbqUN9/GGUsyfJj4akH
-/nxxH2szJGoeBfcFaMBqEssuXmHLrijTfsK0ZpEmXzwuJF/LWA/rKOyvEZbz3Htv
-wKeI8lN3s2Berq4o2jUsbzRF0ybh3uxbTydrFny9RAQYgrOJeRcQcT16ohZO9QHN
-pGxlaKFJdlxDydi8NmdspZS11My5vWo1ViHe2MPr+8ukYEywVaCge1ey
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF0DCCBLigAwIBAgIEOrZQizANBgkqhkiG9w0BAQUFADB/MQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDElMCMGA1UECxMcUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTEuMCwGA1UEAxMlUXVvVmFkaXMgUm9vdCBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wMTAzMTkxODMzMzNaFw0yMTAzMTcxODMz
-MzNaMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMSUw
-IwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYDVQQDEyVR
-dW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIIBIjANBgkqhkiG
-9w0BAQEFAAOCAQ8AMIIBCgKCAQEAv2G1lVO6V/z68mcLOhrfEYBklbTRvM16z/Yp
-li4kVEAkOPcahdxYTMukJ0KX0J+DisPkBgNbAKVRHnAEdOLB1Dqr1607BxgFjv2D
-rOpm2RgbaIr1VxqYuvXtdj182d6UajtLF8HVj71lODqV0D1VNk7feVcxKh7YWWVJ
-WCCYfqtffp/p1k3sg3Spx2zY7ilKhSoGFPlU5tPaZQeLYzcS19Dsw3sgQUSj7cug
-F+FxZc4dZjH3dgEZyH0DWLaVSR2mEiboxgx24ONmy+pdpibu5cxfvWenAScOospU
-xbF6lR1xHkopigPcakXBpBlebzbNw6Kwt/5cOOJSvPhEQ+aQuwIDAQABo4ICUjCC
-Ak4wPQYIKwYBBQUHAQEEMTAvMC0GCCsGAQUFBzABhiFodHRwczovL29jc3AucXVv
-dmFkaXNvZmZzaG9yZS5jb20wDwYDVR0TAQH/BAUwAwEB/zCCARoGA1UdIASCAREw
-ggENMIIBCQYJKwYBBAG+WAABMIH7MIHUBggrBgEFBQcCAjCBxxqBxFJlbGlhbmNl
-IG9uIHRoZSBRdW9WYWRpcyBSb290IENlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBh
-c3N1bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFy
-ZCB0ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGNlcnRpZmljYXRpb24gcHJh
-Y3RpY2VzLCBhbmQgdGhlIFF1b1ZhZGlzIENlcnRpZmljYXRlIFBvbGljeS4wIgYI
-KwYBBQUHAgEWFmh0dHA6Ly93d3cucXVvdmFkaXMuYm0wHQYDVR0OBBYEFItLbe3T
-KbkGGew5Oanwl4Rqy+/fMIGuBgNVHSMEgaYwgaOAFItLbe3TKbkGGew5Oanwl4Rq
-y+/foYGEpIGBMH8xCzAJBgNVBAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1p
-dGVkMSUwIwYDVQQLExxSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MS4wLAYD
-VQQDEyVRdW9WYWRpcyBSb290IENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggQ6tlCL
-MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEAitQUtf70mpKnGdSk
-fnIYj9lofFIk3WdvOXrEql494liwTXCYhGHoG+NpGA7O+0dQoE7/8CQfvbLO9Sf8
-7C9TqnN7Az10buYWnuulLsS/VidQK2K6vkscPFVcQR0kvoIgR13VRH56FmjffU1R
-cHhXHTMe/QKZnAzNCgVPx7uOpHX6Sm2xgI4JVrmcGmD+XcHXetwReNDWXcG31a0y
-mQM6isxUJTkxgXsTIlG6Rmyhu576BGxJJnSP0nPrzDCi5upZIof4l/UO/erMkqQW
-xFIY6iHOsfHmhIHluqmGKPJDWl0Snawe2ajlCmqnf6CHKc/yiU3U7MXi5nrQNiOK
-SnQ2+Q==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFtzCCA5+gAwIBAgICBQkwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMjAeFw0wNjExMjQxODI3MDBaFw0zMTExMjQxODIzMzNaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDIwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCa
-GMpLlA0ALa8DKYrwD4HIrkwZhR0In6spRIXzL4GtMh6QRr+jhiYaHv5+HBg6XJxg
-Fyo6dIMzMH1hVBHL7avg5tKifvVrbxi3Cgst/ek+7wrGsxDp3MJGF/hd/aTa/55J
-WpzmM+Yklvc/ulsrHHo1wtZn/qtmUIttKGAr79dgw8eTvI02kfN/+NsRE8Scd3bB
-rrcCaoF6qUWD4gXmuVbBlDePSHFjIuwXZQeVikvfj8ZaCuWw419eaxGrDPmF60Tp
-+ARz8un+XJiM9XOva7R+zdRcAitMOeGylZUtQofX1bOQQ7dsE/He3fbE+Ik/0XX1
-ksOR1YqI0JDs3G3eicJlcZaLDQP9nL9bFqyS2+r+eXyt66/3FsvbzSUr5R/7mp/i
-Ucw6UwxI5g69ybR2BlLmEROFcmMDBOAENisgGQLodKcftslWZvB1JdxnwQ5hYIiz
-PtGo/KPaHbDRsSNU30R2be1B2MGyIrZTHN81Hdyhdyox5C315eXbyOD/5YDXC2Og
-/zOhD7osFRXql7PSorW+8oyWHhqPHWykYTe5hnMz15eWniN9gqRMgeKh0bpnX5UH
-oycR7hYQe7xFSkyyBNKr79X9DFHOUGoIMfmR2gyPZFwDwzqLID9ujWc9Otb+fVuI
-yV77zGHcizN300QyNQliBJIWENieJ0f7OyHj+OsdWwIDAQABo4GwMIGtMA8GA1Ud
-EwEB/wQFMAMBAf8wCwYDVR0PBAQDAgEGMB0GA1UdDgQWBBQahGK8SEwzJQTU7tD2
-A8QZRtGUazBuBgNVHSMEZzBlgBQahGK8SEwzJQTU7tD2A8QZRtGUa6FJpEcwRTEL
-MAkGA1UEBhMCQk0xGTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMT
-ElF1b1ZhZGlzIFJvb3QgQ0EgMoICBQkwDQYJKoZIhvcNAQEFBQADggIBAD4KFk2f
-BluornFdLwUvZ+YTRYPENvbzwCYMDbVHZF34tHLJRqUDGCdViXh9duqWNIAXINzn
-g/iN/Ae42l9NLmeyhP3ZRPx3UIHmfLTJDQtyU/h2BwdBR5YM++CCJpNVjP4iH2Bl
-fF/nJrP3MpCYUNQ3cVX2kiF495V5+vgtJodmVjB3pjd4M1IQWK4/YY7yarHvGH5K
-WWPKjaJW1acvvFYfzznB4vsKqBUsfU16Y8Zsl0Q80m/DShcK+JDSV6IZUaUtl0Ha
-B0+pUNqQjZRG4T7wlP0QADj1O+hA4bRuVhogzG9Yje0uRY/W6ZM/57Es3zrWIozc
-hLsib9D45MY56QSIPMO661V6bYCZJPVsAfv4l7CUW+v90m/xd2gNNWQjrLhVoQPR
-TUIZ3Ph1WVaj+ahJefivDrkRoHy3au000LYmYjgahwz46P0u05B/B5EqHdZ+XIWD
-mbA4CD/pXvk1B+TJYm5Xf6dQlfe6yJvmjqIBxdZmv3lh8zwc4bmCXF2gw+nYSL0Z
-ohEUGW6yhhtoPkg3Goi3XZZenMfvJ2II4pEZXNLxId26F0KCl3GBUzGpn/Z9Yr9y
-4aOTHcyKJloJONDO1w2AFrR4pTqHTI2KpdVGl/IsELm8VCLAAVBpQ570su9t+Oza
-8eOx79+Rj1QqCyXBJhnEUhAFZdWCEOrCMc0u
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGnTCCBIWgAwIBAgICBcYwDQYJKoZIhvcNAQEFBQAwRTELMAkGA1UEBhMCQk0x
-GTAXBgNVBAoTEFF1b1ZhZGlzIExpbWl0ZWQxGzAZBgNVBAMTElF1b1ZhZGlzIFJv
-b3QgQ0EgMzAeFw0wNjExMjQxOTExMjNaFw0zMTExMjQxOTA2NDRaMEUxCzAJBgNV
-BAYTAkJNMRkwFwYDVQQKExBRdW9WYWRpcyBMaW1pdGVkMRswGQYDVQQDExJRdW9W
-YWRpcyBSb290IENBIDMwggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQDM
-V0IWVJzmmNPTTe7+7cefQzlKZbPoFog02w1ZkXTPkrgEQK0CSzGrvI2RaNggDhoB
-4hp7Thdd4oq3P5kazethq8Jlph+3t723j/z9cI8LoGe+AaJZz3HmDyl2/7FWeUUr
-H556VOijKTVopAFPD6QuN+8bv+OPEKhyq1hX51SGyMnzW9os2l2ObjyjPtr7guXd
-8lyyBTNvijbO0BNO/79KDDRMpsMhvVAEVeuxu537RR5kFd5VAYwCdrXLoT9Cabwv
-vWhDFlaJKjdhkf2mrk7AyxRllDdLkgbvBNDInIjbC3uBr7E9KsRlOni27tyAsdLT
-mZw67mtaa7ONt9XOnMK+pUsvFrGeaDsGb659n/je7Mwpp5ijJUMv7/FfJuGITfhe
-btfZFG4ZM2mnO4SJk8RTVROhUXhA+LjJou57ulJCg54U7QVSWllWp5f8nT8KKdjc
-T5EOE7zelaTfi5m+rJsziO+1ga8bxiJTyPbH7pcUsMV8eFLI8M5ud2CEpukqdiDt
-WAEXMJPpGovgc2PZapKUSU60rUqFxKMiMPwJ7Wgic6aIDFUhWMXhOp8q3crhkODZ
-c6tsgLjoC2SToJyMGf+z0gzskSaHirOi4XCPLArlzW1oUevaPwV/izLmE1xr/l9A
-4iLItLRkT9a6fUg+qGkM17uGcclzuD87nSVL2v9A6wIDAQABo4IBlTCCAZEwDwYD
-VR0TAQH/BAUwAwEB/zCB4QYDVR0gBIHZMIHWMIHTBgkrBgEEAb5YAAMwgcUwgZMG
-CCsGAQUFBwICMIGGGoGDQW55IHVzZSBvZiB0aGlzIENlcnRpZmljYXRlIGNvbnN0
-aXR1dGVzIGFjY2VwdGFuY2Ugb2YgdGhlIFF1b1ZhZGlzIFJvb3QgQ0EgMyBDZXJ0
-aWZpY2F0ZSBQb2xpY3kgLyBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dC4wLQYIKwYBBQUHAgEWIWh0dHA6Ly93d3cucXVvdmFkaXNnbG9iYWwuY29tL2Nw
-czALBgNVHQ8EBAMCAQYwHQYDVR0OBBYEFPLAE+CCQz777i9nMpY1XNu4ywLQMG4G
-A1UdIwRnMGWAFPLAE+CCQz777i9nMpY1XNu4ywLQoUmkRzBFMQswCQYDVQQGEwJC
-TTEZMBcGA1UEChMQUXVvVmFkaXMgTGltaXRlZDEbMBkGA1UEAxMSUXVvVmFkaXMg
-Um9vdCBDQSAzggIFxjANBgkqhkiG9w0BAQUFAAOCAgEAT62gLEz6wPJv92ZVqyM0
-7ucp2sNbtrCD2dDQ4iH782CnO11gUyeim/YIIirnv6By5ZwkajGxkHon24QRiSem
-d1o417+shvzuXYO8BsbRd2sPbSQvS3pspweWyuOEn62Iix2rFo1bZhfZFvSLgNLd
-+LJ2w/w4E6oM3kJpK27zPOuAJ9v1pkQNn1pVWQvVDVJIxa6f8i+AxeoyUDUSly7B
-4f/xI4hROJ/yZlZ25w9Rl6VSDE1JUZU2Pb+iSwwQHYaZTKrzchGT5Or2m9qoXadN
-t54CrnMAyNojA+j56hl0YgCUyyIgvpSnWbWCar6ZeXqp8kokUvd0/bpO5qgdAm6x
-DYBEwa7TIzdfu4V8K5Iu6H6li92Z4b8nby1dqnuH/grdS/yO9SbkbnBCbjPsMZ57
-k8HkyWkaPcBrTiJt7qtYTcbQQcEr6k8Sh17rRdhs9ZgC06DYVYoGmRmioHfRMJ6s
-zHXug/WwYjnPbFfiTNKRCw51KBuav/0aQ/HKd/s7j2G4aSgWQgRecCocIdiP4b0j
-Wy10QJLZYxkNc91pvGJHvOB0K7Lrfb5BG7XARsWhIstfTsEokt4YutUqKLsRixeT
-mJlglFwjz1onl14LBQaTNx47aTbrqZ5hHY8y2o4M1nQ+ewkk2gF3R8Q7zTSMmfXK
-4SVhM7JZG+Ju1zdXtg2pEto=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMjIzM1oXDTE5MDYy
-NjAwMjIzM1owgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDMgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDjmFGWHOjVsQaBalfD
-cnWTq8+epvzzFlLWLU2fNUSoLgRNB0mKOCn1dzfnt6td3zZxFJmP3MKS8edgkpfs
-2Ejcv8ECIMYkpChMMFp2bbFc893enhBxoYjHW5tBbcqwuI4V7q0zK89HBFx1cQqY
-JJgpp0lZpd34t0NiYfPT4tBVPwIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFa7AliE
-Zwgs3x/be0kz9dNnnfS0ChCzycUs4pJqcXgn8nCDQtM+z6lU9PHYkhaM0QTLS6vJ
-n0WuPIqpsHEzXcjFV9+vqDWzf4mH6eglkrh/hXqu1rweN1gqZ8mRzyqBPu3GOd/A
-PhmcGcwTTYJBtYze4D1gCCAPRX5ron+jjBXu
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICXDCCAcWgAwIBAgIQCgEBAQAAAnwAAAALAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMTAyNCBWMzAeFw0wMTAyMjIyMTAxNDlaFw0yNjAyMjIyMDAxNDlaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAx
-MDI0IFYzMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDV3f5mCc8kPD6ugU5O
-isRpgFtZO9+5TUzKtS3DJy08rwBCbbwoppbPf9dYrIMKo1W1exeQFYRMiu4mmdxY
-78c4pqqv0I5CyGLXq6yp+0p9v+r+Ek3d/yYtbzZUaMjShFbuklNhCbM/OZuoyZu9
-zp9+1BlqFikYvtc6adwlWzMaUQIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjAfBgNVHSMEGDAWgBTEwBykB5T9zU0B1FTapQxf3q4FWjAd
-BgNVHQ4EFgQUxMAcpAeU/c1NAdRU2qUMX96uBVowDQYJKoZIhvcNAQEFBQADgYEA
-Py1q4yZDlX2Jl2X7deRyHUZXxGFraZ8SmyzVWujAovBDleMf6XbN3Ou8k6BlCsdN
-T1+nr6JGFLkM88y9am63nd4lQtBU/55oc2PcJOsiv6hy8l4A4Q1OOkNumU4/iXgD
-mMrzVcydro7BqkWY+o8aoI2II/EVQQ2lRj6RP4vr93E=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDYTCCAkmgAwIBAgIQCgEBAQAAAnwAAAAKAAAAAjANBgkqhkiG9w0BAQUFADA6
-MRkwFwYDVQQKExBSU0EgU2VjdXJpdHkgSW5jMR0wGwYDVQQLExRSU0EgU2VjdXJp
-dHkgMjA0OCBWMzAeFw0wMTAyMjIyMDM5MjNaFw0yNjAyMjIyMDM5MjNaMDoxGTAX
-BgNVBAoTEFJTQSBTZWN1cml0eSBJbmMxHTAbBgNVBAsTFFJTQSBTZWN1cml0eSAy
-MDQ4IFYzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAt49VcdKA3Xtp
-eafwGFAyPGJn9gqVB93mG/Oe2dJBVGutn3y+Gc37RqtBaB4Y6lXIL5F4iSj7Jylg
-/9+PjDvJSZu1pJTOAeo+tWN7fyb9Gd3AIb2E0S1PRsNO3Ng3OTsor8udGuorryGl
-wSMiuLgbWhOHV4PR8CDn6E8jQrAApX2J6elhc5SYcSa8LWrg903w8bYqODGBDSnh
-AMFRD0xS+ARaqn1y07iHKrtjEAMqs6FPDVpeRrc9DvV07Jmf+T0kgYim3WBU6JU2
-PcYJk5qjEoAAVZkZR73QpXzDuvsf9/UP+Ky5tfQ3mBMY3oVbtwyCO4dvlTlYMNpu
-AWgXIszACwIDAQABo2MwYTAPBgNVHRMBAf8EBTADAQH/MA4GA1UdDwEB/wQEAwIB
-BjAfBgNVHSMEGDAWgBQHw1EwpKrpRa41JPr/JCwz0LGdjDAdBgNVHQ4EFgQUB8NR
-MKSq6UWuNST6/yQsM9CxnYwwDQYJKoZIhvcNAQEFBQADggEBAF8+hnZuuDU8TjYc
-HnmYv/3VEhF5Ug7uMYm83X/50cYVIeiKAVQNOvtUudZj1LGqlk2iQk3UUx+LEN5/
-Zb5gEydxiKRz44Rj0aRV4VCT5hsOedBnvEbIvz8XDZXmxpBp3ue0L96VfdASPz0+
-f00/FGj1EVDVwfSQpQgdMWD/YIwjVAqv/qFuxdF6Kmh4zx6CCiC0H63lhbJqaHVO
-rSU3lIW+vaHU6rcMSzyd6BIA8F+sDeGscGNz9395nzIlQnQFgCi/vcEkllgVsRch
-6YlL2weIZ/QVrXA+L02FO8K32/6YaCOJ4XQP3vTFhGMpG8zLB8kApKnXwiJPZ9d3
-7CAFYd4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDuDCCAqCgAwIBAgIQDPCOXAgWpa1Cf/DrJxhZ0DANBgkqhkiG9w0BAQUFADBI
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-FzAVBgNVBAMTDlNlY3VyZVRydXN0IENBMB4XDTA2MTEwNzE5MzExOFoXDTI5MTIz
-MTE5NDA1NVowSDELMAkGA1UEBhMCVVMxIDAeBgNVBAoTF1NlY3VyZVRydXN0IENv
-cnBvcmF0aW9uMRcwFQYDVQQDEw5TZWN1cmVUcnVzdCBDQTCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAKukgeWVzfX2FI7CT8rU4niVWJxB4Q2ZQCQXOZEz
-Zum+4YOvYlyJ0fwkW2Gz4BERQRwdbvC4u/jep4G6pkjGnx29vo6pQT64lO0pGtSO
-0gMdA+9tDWccV9cGrcrI9f4Or2YlSASWC12juhbDCE/RRvgUXPLIXgGZbf2IzIao
-wW8xQmxSPmjL8xk037uHGFaAJsTQ3MBv396gwpEWoGQRS0S8Hvbn+mPeZqx2pHGj
-7DaUaHp3pLHnDi+BeuK1cobvomuL8A/b01k/unK8RCSc43Oz969XL0Imnal0ugBS
-8kvNU3xHCzaFDmapCJcWNFfBZveA4+1wVMeT4C4oFVmHursCAwEAAaOBnTCBmjAT
-BgkrBgEEAYI3FAIEBh4EAEMAQTALBgNVHQ8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB
-/zAdBgNVHQ4EFgQUQjK2FvoE/f5dS3rD/fdMQB1aQ68wNAYDVR0fBC0wKzApoCeg
-JYYjaHR0cDovL2NybC5zZWN1cmV0cnVzdC5jb20vU1RDQS5jcmwwEAYJKwYBBAGC
-NxUBBAMCAQAwDQYJKoZIhvcNAQEFBQADggEBADDtT0rhWDpSclu1pqNlGKa7UTt3
-6Z3q059c4EVlew3KW+JwULKUBRSuSceNQQcSc5R+DCMh/bwQf2AQWnL1mA6s7Ll/
-3XpvXdMc9P+IBWlCqQVxyLesJugutIxq/3HcuLHfmbx8IVQr5Fiiu1cprp6poxkm
-D5kuCLDv/WnPmRoJjeOnnyvJNjR7JLN4TJUXpAYmHrZkUjZfYGfZnMUFdAvnZyPS
-CPyI6a6Lf+Ew9Dd+/cYy2i2eRDAwbO4H3tI0/NL/QPZL9GZGBlSm8jIKYyYwa5vR
-3ItHuuG51WLQoqD0ZwV4KWMabwTW+MZMo5qxN7SN5ShLHZ4swrhovO0C7jE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDvDCCAqSgAwIBAgIQB1YipOjUiolN9BPI8PjqpTANBgkqhkiG9w0BAQUFADBK
-MQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3QgQ29ycG9yYXRpb24x
-GTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwHhcNMDYxMTA3MTk0MjI4WhcNMjkx
-MjMxMTk1MjA2WjBKMQswCQYDVQQGEwJVUzEgMB4GA1UEChMXU2VjdXJlVHJ1c3Qg
-Q29ycG9yYXRpb24xGTAXBgNVBAMTEFNlY3VyZSBHbG9iYWwgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvNS7YrGxVaQZx5RNoJLNP2MwhR/jxYDiJ
-iQPpvepeRlMJ3Fz1Wuj3RSoC6zFh1ykzTM7HfAo3fg+6MpjhHZevj8fcyTiW89sa
-/FHtaMbQbqR8JNGuQsiWUGMu4P51/pinX0kuleM5M2SOHqRfkNJnPLLZ/kG5VacJ
-jnIFHovdRIWCQtBJwB1g8NEXLJXr9qXBkqPFwqcIYA1gBBCWeZ4WNOaptvolRTnI
-HmX5k/Wq8VLcmZg9pYYaDDUz+kulBAYVHDGA76oYa8J719rO+TMg1fW9ajMtgQT7
-sFzUnKPiXB3jqUJ1XnvUd+85VLrJChgbEplJL4hL/VBi0XPnj3pDAgMBAAGjgZ0w
-gZowEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0PBAQDAgGGMA8GA1UdEwEB/wQF
-MAMBAf8wHQYDVR0OBBYEFK9EBMJBfkiD2045AuzshHrmzsmkMDQGA1UdHwQtMCsw
-KaAnoCWGI2h0dHA6Ly9jcmwuc2VjdXJldHJ1c3QuY29tL1NHQ0EuY3JsMBAGCSsG
-AQQBgjcVAQQDAgEAMA0GCSqGSIb3DQEBBQUAA4IBAQBjGghAfaReUw132HquHw0L
-URYD7xh8yOOvaliTFGCRsoTciE6+OYo68+aCiV0BN7OrJKQVDpI1WkpEXk5X+nXO
-H0jOZvQ8QCaSmGwb7iRGDBezUqXbpZGRzzfTb+cnCDpOGR86p1hcF895P4vkp9Mm
-I50mD1hp/Ed+stCNi5O/KU9DaXR2Z0vPB4zmAve14bRDtUstFJ/53CYNv6ZHdAbY
-iNE6KTCEztI5gGIbqMdXSbxqVVFnFUq+NQfk1XWYN3kwFNspnWzFacxHVaIw98xc
-f8LDmBxrThaA63p4ZUWiABqvDA1VZDRIuJK58bRQKfJPIx/abKwfROHdI3hRW8cW
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDWjCCAkKgAwIBAgIBADANBgkqhkiG9w0BAQUFADBQMQswCQYDVQQGEwJKUDEY
-MBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYDVQQLEx5TZWN1cml0eSBDb21t
-dW5pY2F0aW9uIFJvb3RDQTEwHhcNMDMwOTMwMDQyMDQ5WhcNMjMwOTMwMDQyMDQ5
-WjBQMQswCQYDVQQGEwJKUDEYMBYGA1UEChMPU0VDT00gVHJ1c3QubmV0MScwJQYD
-VQQLEx5TZWN1cml0eSBDb21tdW5pY2F0aW9uIFJvb3RDQTEwggEiMA0GCSqGSIb3
-DQEBAQUAA4IBDwAwggEKAoIBAQCzs/5/022x7xZ8V6UMbXaKL0u/ZPtM7orw8yl8
-9f/uKuDp6bpbZCKamm8sOiZpUQWZJtzVHGpxxpp9Hp3dfGzGjGdnSj74cbAZJ6kJ
-DKaVv0uMDPpVmDvY6CKhS3E4eayXkmmziX7qIWgGmBSWh9JhNrxtJ1aeV+7AwFb9
-Ms+k2Y7CI9eNqPPYJayX5HA49LY6tJ07lyZDo6G8SVlyTCMwhwFY9k6+HGhWZq/N
-QV3Is00qVUarH9oe4kA92819uZKAnDfdDJZkndwi92SL32HeFZRSFaB9UslLqCHJ
-xrHty8OVYNEP8Ktw+N/LTX7s1vqr2b1/VPKl6Xn62dZ2JChzAgMBAAGjPzA9MB0G
-A1UdDgQWBBSgc0mZaNyFW2XjmygvV5+9M7wHSDALBgNVHQ8EBAMCAQYwDwYDVR0T
-AQH/BAUwAwEB/zANBgkqhkiG9w0BAQUFAAOCAQEAaECpqLvkT115swW1F7NgE+vG
-kl3g0dNq/vu+m22/xwVtWSDEHPC32oRYAmP6SBbvT6UL90qY8j+eG61Ha2POCEfr
-Uj94nK9NrvjVT8+amCoQQTlSxN3Zmw7vkwGusi7KaEIkQmywszo+zenaSMQVy+n5
-Bw+SUEmK3TGXX8npN6o7WWWXlDLJs58+OmJYxUmtYg5xpTKqL8aJdkNAExNnPaJU
-JRDL8Try2frbSVa7pv6nQTXD4IhhyYjH3zYQIphZ6rBK+1YWc26sTfcioU+tHXot
-RSflMMFe8toTyyVCUZVHA4xsIcx0Qu1T/zOLjw9XARYvz6buyXAiFL39vmwLAw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBJDANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MxIENBMB4XDTAx
-MDQwNjEwNDkxM1oXDTIxMDQwNjEwNDkxM1owOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMSBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBALWJHytPZwp5/8Ue+H887dF+2rDNbS82rDTG
-29lkFwhjMDMiikzujrsPDUJVyZ0upe/3p4zDq7mXy47vPxVnqIJyY1MPQYx9EJUk
-oVqlBvqSV536pQHydekfvFYmUk54GWVYVQNYwBSujHxVX3BbdyMGNpfzJLWaRpXk
-3w0LBUXl0fIdgrvGE+D+qnr9aTCU89JFhfzyMlsy3uhsXR/LpCJ0sICOXZT3BgBL
-qdReLjVQCfOAl/QMF6452F/NM8EcyonCIvdFEu1eEpOdY6uCLrnrQkFEy0oaAIIN
-nvmLVz5MxxftLItyM19yejhW1ebZrgUaHXVFsculJRwSVzb9IjcCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQIR+IMi/ZTiFIwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQCLGrLJXWG04bkruVPRsoWdd44W7hE928Jj2VuX
-ZfsSZ9gqXLar5V7DtxYvyOirHYr9qxp81V9jz9yw3Xe5qObSIjiHBxTZ/75Wtf0H
-DjxVyhbMp6Z3N/vbXB9OWQaHowND9Rart4S9Tu+fMTfwRvFAttEMpWT4Y14h21VO
-TzF2nBBhjrZTOqMRvq9tfB69ri3iDGnHhVNoomG6xT60eVR4ngrHAr5i0RGCS2Uv
-kVrCqIexVmiUefkl98HVrhq4uz2PqYo4Ffdz0Fpg0YCw8NzVUM1O7pJIae2yIx4w
-zMiUyLb1O4Z/P6Yun/Y+LLWSlj7fLJOK/4GMDw9ZIRlXvVWa
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDIDCCAgigAwIBAgIBHTANBgkqhkiG9w0BAQUFADA5MQswCQYDVQQGEwJGSTEP
-MA0GA1UEChMGU29uZXJhMRkwFwYDVQQDExBTb25lcmEgQ2xhc3MyIENBMB4XDTAx
-MDQwNjA3Mjk0MFoXDTIxMDQwNjA3Mjk0MFowOTELMAkGA1UEBhMCRkkxDzANBgNV
-BAoTBlNvbmVyYTEZMBcGA1UEAxMQU29uZXJhIENsYXNzMiBDQTCCASIwDQYJKoZI
-hvcNAQEBBQADggEPADCCAQoCggEBAJAXSjWdyvANlsdE+hY3/Ei9vX+ALTU74W+o
-Z6m/AxxNjG8yR9VBaKQTBME1DJqEQ/xcHf+Js+gXGM2RX/uJ4+q/Tl18GybTdXnt
-5oTjV+WtKcT0OijnpXuENmmz/V52vaMtmdOQTiMofRhj8VQ7Jp12W5dCsv+u8E7s
-3TmVToMGf+dJQMjFAbJUWmYdPfz56TwKnoG4cPABi+QjVHzIrviQHgCWctRUz2Ej
-vOr7nQKV0ba5cTppCD8PtOFCx4j1P5iop7oc4HFx71hXgVB6XGt0Rg6DA5jDjqhu
-8nYybieDwnPz3BjotJPqdURrBGAgcVeHnfO+oJAjPYok4doh28MCAwEAAaMzMDEw
-DwYDVR0TAQH/BAUwAwEB/zARBgNVHQ4ECgQISqCqWITTXjwwCwYDVR0PBAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQBazof5FnIVV0sd2ZvnoiYw7JNn39Yt0jSv9zil
-zqsWuasvfDXLrNAPtEwr/IDva4yRXzZ299uzGxnq9LIR/WFxRL8oszodv7ND6J+/
-3DEIcbCdjdY0RzKQxmUk96BKfARzjzlvF4xytb1LyHr4e4PDKE6cCepnP7JnBBvD
-FNr450kkkdAdavphOe9r5yF1BgfYErQhIHBCcYHaPJo2vqZbDWpsmh+Re/n570K6
-Tk6ezAyNlNzZRZxe7EJQY670XcSxEtzKO6gunRRaBXW37Ndj4ro1tgQIkejanZz2
-ZrUYrAqmVCY0M9IbwdR/GjqOC6oybtv8TyWf2TLHllpwrN9M
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDujCCAqKgAwIBAgIEAJiWijANBgkqhkiG9w0BAQUFADBVMQswCQYDVQQGEwJO
-TDEeMBwGA1UEChMVU3RhYXQgZGVyIE5lZGVybGFuZGVuMSYwJAYDVQQDEx1TdGFh
-dCBkZXIgTmVkZXJsYW5kZW4gUm9vdCBDQTAeFw0wMjEyMTcwOTIzNDlaFw0xNTEy
-MTYwOTE1MzhaMFUxCzAJBgNVBAYTAk5MMR4wHAYDVQQKExVTdGFhdCBkZXIgTmVk
-ZXJsYW5kZW4xJjAkBgNVBAMTHVN0YWF0IGRlciBOZWRlcmxhbmRlbiBSb290IENB
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAmNK1URF6gaYUmHFtvszn
-ExvWJw56s2oYHLZhWtVhCb/ekBPHZ+7d89rFDBKeNVU+LCeIQGv33N0iYfXCxw71
-9tV2U02PjLwYdjeFnejKScfST5gTCaI+Ioicf9byEGW07l8Y1Rfj+MX94p2i71MO
-hXeiD+EwR+4A5zN9RGcaC1Hoi6CeUJhoNFIfLm0B8mBF8jHrqTFoKbt6QZ7GGX+U
-tFE5A3+y3qcym7RHjm+0Sq7lr7HcsBthvJly3uSJt3omXdozSVtSnA71iq3DuD3o
-BmrC1SoLbHuEvVYFy4ZlkuxEK7COudxwC0barbxjiDn622r+I/q85Ej0ZytqERAh
-SQIDAQABo4GRMIGOMAwGA1UdEwQFMAMBAf8wTwYDVR0gBEgwRjBEBgRVHSAAMDww
-OgYIKwYBBQUHAgEWLmh0dHA6Ly93d3cucGtpb3ZlcmhlaWQubmwvcG9saWNpZXMv
-cm9vdC1wb2xpY3kwDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBSofeu8Y6R0E3QA
-7Jbg0zTBLL9s+DANBgkqhkiG9w0BAQUFAAOCAQEABYSHVXQ2YcG70dTGFagTtJ+k
-/rvuFbQvBgwp8qiSpGEN/KtcCFtREytNwiphyPgJWPwtArI5fZlmgb9uXJVFIGzm
-eafR2Bwp/MIgJ1HI8XxdNGdphREwxgDS1/PTfLbwMVcoEoJz6TMvplW0C5GUR5z6
-u3pCMuiufi3IvKwUv9kP2Vv8wfl6leF9fpb8cbDCTMjfRTTJzg3ynGQI0DvDKcWy
-7ZAEwbEpkcUwb8GpcjPM/l0WFywRaed+/sWDCN+83CI6LiBpIzlWYGeQiy52OfsR
-iJf2fL1LuCAWZwWN4jvBcj+UlTfHXbme2JOhF4//DGYVwSR8MnwDHTuhWEUykw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEDzCCAvegAwIBAgIBADANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJVUzEl
-MCMGA1UEChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMp
-U3RhcmZpZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQw
-NjI5MTczOTE2WhcNMzQwNjI5MTczOTE2WjBoMQswCQYDVQQGEwJVUzElMCMGA1UE
-ChMcU3RhcmZpZWxkIFRlY2hub2xvZ2llcywgSW5jLjEyMDAGA1UECxMpU3RhcmZp
-ZWxkIENsYXNzIDIgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggEgMA0GCSqGSIb3
-DQEBAQUAA4IBDQAwggEIAoIBAQC3Msj+6XGmBIWtDBFk385N78gDGIc/oav7PKaf
-8MOh2tTYbitTkPskpD6E8J7oX+zlJ0T1KKY/e97gKvDIr1MvnsoFAZMej2YcOadN
-+lq2cwQlZut3f+dZxkqZJRRU6ybH838Z1TBwj6+wRir/resp7defqgSHo9T5iaU0
-X9tDkYI22WY8sbi5gv2cOj4QyDvvBmVmepsZGD3/cVE8MC5fvj13c7JdBmzDI1aa
-K4UmkhynArPkPw2vCHmCuDY96pzTNbO8acr1zJ3o/WSNF4Azbl5KXZnJHoe0nRrA
-1W4TNSNe35tfPe/W93bC6j67eA0cQmdrBNj41tpvi/JEoAGrAgEDo4HFMIHCMB0G
-A1UdDgQWBBS/X7fRzt0fhvRbVazc1xDCDqmI5zCBkgYDVR0jBIGKMIGHgBS/X7fR
-zt0fhvRbVazc1xDCDqmI56FspGowaDELMAkGA1UEBhMCVVMxJTAjBgNVBAoTHFN0
-YXJmaWVsZCBUZWNobm9sb2dpZXMsIEluYy4xMjAwBgNVBAsTKVN0YXJmaWVsZCBD
-bGFzcyAyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5ggEAMAwGA1UdEwQFMAMBAf8w
-DQYJKoZIhvcNAQEFBQADggEBAAWdP4id0ckaVaGsafPzWdqbAYcaT1epoXkJKtv3
-L7IezMdeatiDh6GX70k1PncGQVhiv45YuApnP+yz3SFmH8lU+nLMPUxA2IGvd56D
-eruix/U0F47ZEUD0/CwqTRV/p2JdLiXTAAsgGh1o+Re49L2L7ShZ3U0WixeDyLJl
-xy16paq8U4Zt3VekyvggQQto8PT7dL5WXXp59fkdheMtlb71cZBDzI0fmgAKhynp
-VSJYACPq4xJDKVtHCN2MQWplBqjlIapBtJUhlbl90TSrE9atvNziPTnNvT51cKEY
-WQPJIrSPnNVeKtelttQKbfi3QBFGmh95DmK/D5fs4C8fF5Q=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIHyTCCBbGgAwIBAgIBATANBgkqhkiG9w0BAQUFADB9MQswCQYDVQQGEwJJTDEW
-MBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMiU2VjdXJlIERpZ2l0YWwg
-Q2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3RhcnRDb20gQ2VydGlmaWNh
-dGlvbiBBdXRob3JpdHkwHhcNMDYwOTE3MTk0NjM2WhcNMzYwOTE3MTk0NjM2WjB9
-MQswCQYDVQQGEwJJTDEWMBQGA1UEChMNU3RhcnRDb20gTHRkLjErMCkGA1UECxMi
-U2VjdXJlIERpZ2l0YWwgQ2VydGlmaWNhdGUgU2lnbmluZzEpMCcGA1UEAxMgU3Rh
-cnRDb20gQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwggIiMA0GCSqGSIb3DQEBAQUA
-A4ICDwAwggIKAoICAQDBiNsJvGxGfHiflXu1M5DycmLWwTYgIiRezul38kMKogZk
-pMyONvg45iPwbm2xPN1yo4UcodM9tDMr0y+v/uqwQVlntsQGfQqedIXWeUyAN3rf
-OQVSWff0G0ZDpNKFhdLDcfN1YjS6LIp/Ho/u7TTQEceWzVI9ujPW3U3eCztKS5/C
-Ji/6tRYccjV3yjxd5srhJosaNnZcAdt0FCX+7bWgiA/deMotHweXMAEtcnn6RtYT
-Kqi5pquDSR3l8u/d5AGOGAqPY1MWhWKpDhk6zLVmpsJrdAfkK+F2PrRt2PZE4XNi
-HzvEvqBTViVsUQn3qqvKv3b9bZvzndu/PWa8DFaqr5hIlTpL36dYUNk4dalb6kMM
-Av+Z6+hsTXBbKWWc3apdzK8BMewM69KN6Oqce+Zu9ydmDBpI125C4z/eIT574Q1w
-+2OqqGwaVLRcJXrJosmLFqa7LH4XXgVNWG4SHQHuEhANxjJ/GP/89PrNbpHoNkm+
-Gkhpi8KWTRoSsmkXwQqQ1vp5Iki/untp+HDH+no32NgN0nZPV/+Qt+OR0t3vwmC3
-Zzrd/qqc8NSLf3Iizsafl7b4r4qgEKjZ+xjGtrVcUjyJthkqcwEKDwOzEmDyei+B
-26Nu/yYwl/WL3YlXtq09s68rxbd2AvCl1iuahhQqcvbjM4xdCUsT37uMdBNSSwID
-AQABo4ICUjCCAk4wDAYDVR0TBAUwAwEB/zALBgNVHQ8EBAMCAa4wHQYDVR0OBBYE
-FE4L7xqkQFulF2mHMMo0aEPQQa7yMGQGA1UdHwRdMFswLKAqoCiGJmh0dHA6Ly9j
-ZXJ0LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMCugKaAnhiVodHRwOi8vY3Js
-LnN0YXJ0Y29tLm9yZy9zZnNjYS1jcmwuY3JsMIIBXQYDVR0gBIIBVDCCAVAwggFM
-BgsrBgEEAYG1NwEBATCCATswLwYIKwYBBQUHAgEWI2h0dHA6Ly9jZXJ0LnN0YXJ0
-Y29tLm9yZy9wb2xpY3kucGRmMDUGCCsGAQUFBwIBFilodHRwOi8vY2VydC5zdGFy
-dGNvbS5vcmcvaW50ZXJtZWRpYXRlLnBkZjCB0AYIKwYBBQUHAgIwgcMwJxYgU3Rh
-cnQgQ29tbWVyY2lhbCAoU3RhcnRDb20pIEx0ZC4wAwIBARqBl0xpbWl0ZWQgTGlh
-YmlsaXR5LCByZWFkIHRoZSBzZWN0aW9uICpMZWdhbCBMaW1pdGF0aW9ucyogb2Yg
-dGhlIFN0YXJ0Q29tIENlcnRpZmljYXRpb24gQXV0aG9yaXR5IFBvbGljeSBhdmFp
-bGFibGUgYXQgaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL3BvbGljeS5wZGYwEQYJ
-YIZIAYb4QgEBBAQDAgAHMDgGCWCGSAGG+EIBDQQrFilTdGFydENvbSBGcmVlIFNT
-TCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTANBgkqhkiG9w0BAQUFAAOCAgEAFmyZ
-9GYMNPXQhV59CuzaEE44HF7fpiUFS5Eyweg78T3dRAlbB0mKKctmArexmvclmAk8
-jhvh3TaHK0u7aNM5Zj2gJsfyOZEdUauCe37Vzlrk4gNXcGmXCPleWKYK34wGmkUW
-FjgKXlf2Ysd6AgXmvB618p70qSmD+LIU424oh0TDkBreOKk8rENNZEXO3SipXPJz
-ewT4F+irsfMuXGRuczE6Eri8sxHkfY+BUZo7jYn0TZNmezwD7dOaHZrzZVD1oNB1
-ny+v8OqCQ5j4aZyJecRDjkZy42Q2Eq/3JR44iZB3fsNrarnDy0RLrHiQi+fHLB5L
-EUTINFInzQpdn4XBidUaePKVEFMy3YCEZnXZtWgo+2EuvoSoOMCZEoalHmdkrQYu
-L6lwhceWD3yJZfWOQ1QOq92lgDmUYMA0yZZwLKMS9R9Ie70cfmu3nZD0Ijuu+Pwq
-yvqCUqDvr0tVk+vBtfAii6w0TiYiBKGHLHVKt+V9E9e4DGTANtLJL4YSjCMJwRuC
-O3NJo2pXh5Tl1njFmUNj403gdy3hZZlyaQQaRwnmDwFWJPsfvw55qVguucQJAX6V
-um0ABj6y6koQOdjQK/W/7HW/lwLFCRsI3FU34oH7N4RDYiDK51ZLZer+bMEkkySh
-NOsF/5oirpt9P/FlUQqmMGqz9IgcgA38corog14=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFFjCCBH+gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBsDELMAkGA1UEBhMCSUwx
-DzANBgNVBAgTBklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0
-Q29tIEx0ZC4xGjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBG
-cmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYS
-YWRtaW5Ac3RhcnRjb20ub3JnMB4XDTA1MDMxNzE3Mzc0OFoXDTM1MDMxMDE3Mzc0
-OFowgbAxCzAJBgNVBAYTAklMMQ8wDQYDVQQIEwZJc3JhZWwxDjAMBgNVBAcTBUVp
-bGF0MRYwFAYDVQQKEw1TdGFydENvbSBMdGQuMRowGAYDVQQLExFDQSBBdXRob3Jp
-dHkgRGVwLjEpMCcGA1UEAxMgRnJlZSBTU0wgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkxITAfBgkqhkiG9w0BCQEWEmFkbWluQHN0YXJ0Y29tLm9yZzCBnzANBgkqhkiG
-9w0BAQEFAAOBjQAwgYkCgYEA7YRgACOeyEpRKSfeOqE5tWmrCbIvNP1h3D3TsM+x
-18LEwrHkllbEvqoUDufMOlDIOmKdw6OsWXuO7lUaHEe+o5c5s7XvIywI6Nivcy+5
-yYPo7QAPyHWlLzRMGOh2iCNJitu27Wjaw7ViKUylS7eYtAkUEKD4/mJ2IhULpNYI
-LzUCAwEAAaOCAjwwggI4MA8GA1UdEwEB/wQFMAMBAf8wCwYDVR0PBAQDAgHmMB0G
-A1UdDgQWBBQcicOWzL3+MtUNjIExtpidjShkjTCB3QYDVR0jBIHVMIHSgBQcicOW
-zL3+MtUNjIExtpidjShkjaGBtqSBszCBsDELMAkGA1UEBhMCSUwxDzANBgNVBAgT
-BklzcmFlbDEOMAwGA1UEBxMFRWlsYXQxFjAUBgNVBAoTDVN0YXJ0Q29tIEx0ZC4x
-GjAYBgNVBAsTEUNBIEF1dGhvcml0eSBEZXAuMSkwJwYDVQQDEyBGcmVlIFNTTCBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEhMB8GCSqGSIb3DQEJARYSYWRtaW5Ac3Rh
-cnRjb20ub3JnggEAMB0GA1UdEQQWMBSBEmFkbWluQHN0YXJ0Y29tLm9yZzAdBgNV
-HRIEFjAUgRJhZG1pbkBzdGFydGNvbS5vcmcwEQYJYIZIAYb4QgEBBAQDAgAHMC8G
-CWCGSAGG+EIBDQQiFiBGcmVlIFNTTCBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAy
-BglghkgBhvhCAQQEJRYjaHR0cDovL2NlcnQuc3RhcnRjb20ub3JnL2NhLWNybC5j
-cmwwKAYJYIZIAYb4QgECBBsWGWh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy8wOQYJ
-YIZIAYb4QgEIBCwWKmh0dHA6Ly9jZXJ0LnN0YXJ0Y29tLm9yZy9pbmRleC5waHA/
-YXBwPTExMTANBgkqhkiG9w0BAQQFAAOBgQBscSXhnjSRIe/bbL0BCFaPiNhBOlP1
-ct8nV0t2hPdopP7rPwl+KLhX6h/BquL/lp9JmeaylXOWxkjHXo0Hclb4g4+fd68p
-00UOpO6wNnQt8M2YI3s3S9r+UZjEHjQ8iP2ZO1CnwYszx8JSFhKVU2Ui77qLzmLb
-cCOxgN8aIDjnfg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFujCCA6KgAwIBAgIJALtAHEP1Xk+wMA0GCSqGSIb3DQEBBQUAMEUxCzAJBgNV
-BAYTAkNIMRUwEwYDVQQKEwxTd2lzc1NpZ24gQUcxHzAdBgNVBAMTFlN3aXNzU2ln
-biBHb2xkIENBIC0gRzIwHhcNMDYxMDI1MDgzMDM1WhcNMzYxMDI1MDgzMDM1WjBF
-MQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMR8wHQYDVQQDExZT
-d2lzc1NpZ24gR29sZCBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEAr+TufoskDhJuqVAtFkQ7kpJcyrhdhJJCEyq8ZVeCQD5XJM1QiyUqt2/8
-76LQwB8CJEoTlo8jE+YoWACjR8cGp4QjK7u9lit/VcyLwVcfDmJlD909Vopz2q5+
-bbqBHH5CjCA12UNNhPqE21Is8w4ndwtrvxEvcnifLtg+5hg3Wipy+dpikJKVyh+c
-6bM8K8vzARO/Ws/BtQpgvd21mWRTuKCWs2/iJneRjOBiEAKfNA+k1ZIzUd6+jbqE
-emA8atufK+ze3gE/bk3lUIbLtK/tREDFylqM2tIrfKjuvqblCqoOpd8FUrdVxyJd
-MmqXl2MT28nbeTZ7hTpKxVKJ+STnnXepgv9VHKVxaSvRAiTysybUa9oEVeXBCsdt
-MDeQKuSeFDNeFhdVxVu1yzSJkvGdJo+hB9TGsnhQ2wwMC3wLjEHXuendjIj3o02y
-MszYF9rNt85mndT9Xv+9lz4pded+p2JYryU0pUHHPbwNUMoDAw8IWh+Vc3hiv69y
-FGkOpeUDDniOJihC8AcLYiAQZzlG+qkDzAQ4embvIIO1jEpWjpEA/I5cgt6IoMPi
-aG59je883WX0XaxR7ySArqpWl2/5rX3aYT+YdzylkbYcjCbaZaIJbcHiVOO5ykxM
-gI93e2CaHt+28kgeDrpOVG2Y4OGiGqJ3UM/EY5LsRxmd6+ZrzsECAwEAAaOBrDCB
-qTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUWyV7
-lqRlUX64OfPAeGZe6Drn8O4wHwYDVR0jBBgwFoAUWyV7lqRlUX64OfPAeGZe6Drn
-8O4wRgYDVR0gBD8wPTA7BglghXQBWQECAQEwLjAsBggrBgEFBQcCARYgaHR0cDov
-L3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIBACe6
-45R88a7A3hfm5djV9VSwg/S7zV4Fe0+fdWavPOhWfvxyeDgD2StiGwC5+OlgzczO
-UYrHUDFu4Up+GC9pWbY9ZIEr44OE5iKHjn3g7gKZYbge9LgriBIWhMIxkziWMaa5
-O1M/wySTVltpkuzFwbs4AOPsF6m43Md8AYOfMke6UiI0HTJ6CVanfCU2qT1L2sCC
-bwq7EsiHSycR+R4tx5M/nttfJmtS2S6K8RTGRI0Vqbe/vd6mGu6uLftIdxf+u+yv
-GPUqUfA5hJeVbG4bwyvEdGB5JbAKJ9/fXtI5z0V9QkvfsywexcZdylU6oJxpmo/a
-77KwPJ+HbBIrZXAVUjEaJM9vMSNQH4xPjyPDdEFjHFWoFN0+4FFQz/EbMFYOkrCC
-hdiDyyJkvC24JdVUorgG6q2SpCSgwYa1ShNqR88uC1aVVMvOmttqtKay20EIhid3
-92qgQmwLOM7XdVAyksLfKzAiSNDVQTglXaTpXZ/GlHXQRf0wl0OPkKsKx4ZzYEpp
-Ld6leNcG2mqeSz53OiATIgHQv2ieY2BrNU0LbbqhPcCT4H8js1WtciVORvnSFu+w
-ZMEBnunKoGqYDs/YYPIvSbjkQuE4NRb0yG5P94FW6LqjviOvrv1vA+ACOzB2+htt
-Qc8Bsem4yWb02ybzOqR08kkkW8mw0FfB+j564ZfJ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFwTCCA6mgAwIBAgIITrIAZwwDXU8wDQYJKoZIhvcNAQEFBQAwSTELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEjMCEGA1UEAxMaU3dpc3NTaWdu
-IFBsYXRpbnVtIENBIC0gRzIwHhcNMDYxMDI1MDgzNjAwWhcNMzYxMDI1MDgzNjAw
-WjBJMQswCQYDVQQGEwJDSDEVMBMGA1UEChMMU3dpc3NTaWduIEFHMSMwIQYDVQQD
-ExpTd2lzc1NpZ24gUGxhdGludW0gQ0EgLSBHMjCCAiIwDQYJKoZIhvcNAQEBBQAD
-ggIPADCCAgoCggIBAMrfogLi2vj8Bxax3mCq3pZcZB/HL37PZ/pEQtZ2Y5Wu669y
-IIpFR4ZieIbWIDkm9K6j/SPnpZy1IiEZtzeTIsBQnIJ71NUERFzLtMKfkr4k2Htn
-IuJpX+UFeNSH2XFwMyVTtIc7KZAoNppVRDBopIOXfw0enHb/FZ1glwCNioUD7IC+
-6ixuEFGSzH7VozPY1kneWCqv9hbrS3uQMpe5up1Y8fhXSQQeol0GcN1x2/ndi5ob
-jM89o03Oy3z2u5yg+gnOI2Ky6Q0f4nIoj5+saCB9bzuohTEJfwvH6GXp43gOCWcw
-izSC+13gzJ2BbWLuCB4ELE6b7P6pT1/9aXjvCR+htL/68++QHkwFix7qepF6w9fl
-+zC8bBsQWJj3Gl/QKTIDE0ZNYWqFTFJ0LwYfexHihJfGmfNtf9dng34TaNhxKFrY
-zt3oEBSa/m0jh26OWnA81Y0JAKeqvLAxN23IhBQeW71FYyBrS3SMvds6DsHPWhaP
-pZjydomyExI7C3d3rLvlPClKknLKYRorXkzig3R3+jVIeoVNjZpTxN94ypeRSCtF
-KwH3HBqi7Ri6Cr2D+m+8jVeTO9TUps4e8aCxzqv9KyiaTxvXw3LbpMS/XUz13XuW
-ae5ogObnmLo2t/5u7Su9IPhlGdpVCX4l3P5hYnL5fhgC72O00Puv5TtjjGePAgMB
-AAGjgawwgakwDgYDVR0PAQH/BAQDAgEGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0O
-BBYEFFCvzAeHFUdvOMW0ZdHelarp35zMMB8GA1UdIwQYMBaAFFCvzAeHFUdvOMW0
-ZdHelarp35zMMEYGA1UdIAQ/MD0wOwYJYIV0AVkBAQEBMC4wLAYIKwYBBQUHAgEW
-IGh0dHA6Ly9yZXBvc2l0b3J5LnN3aXNzc2lnbi5jb20vMA0GCSqGSIb3DQEBBQUA
-A4ICAQAIhab1Fgz8RBrBY+D5VUYI/HAcQiiWjrfFwUF1TglxeeVtlspLpYhg0DB0
-uMoI3LQwnkAHFmtllXcBrqS3NQuB2nEVqXQXOHtYyvkv+8Bldo1bAbl93oI9ZLi+
-FHSjClTTLJUYFzX1UWs/j6KWYTl4a0vlpqD4U99REJNi54Av4tHgvI42Rncz7Lj7
-jposiU0xEQ8mngS7twSNC/K5/FqdOxa3L8iYq/6KUFkuozv8KV2LwUvJ4ooTHbG/
-u0IdUt1O2BReEMYxB+9xJ/cbOQncguqLs5WGXv312l0xpuAxtpTmREl0xRbl9x8D
-YSjFyMsSoEJL+WuICI20MhjzdZ/EfwBPBZWcoxcCw7NTm6ogOSkrZvqdr16zktK1
-puEa+S1BaYEUtLS17Yk9zvupnTVCRLEcFHOBzyoBNZox1S2PbYTfgE1X4z/FhHXa
-icYwu+uPyyIIoK6q8QNsOktNCaUOcsZWayFCTiMlFGiudgp8DAdwZPmaL/YFOSbG
-DI8Zf0NebvRbFS/bYV3mZy8/CJT5YLSYMdp08YSTcU1f+2BY0fvEwW2JorsgH51x
-kcsymxM9Pn2SUjWskpSi0xjCfMfqr3YFFt1nJ8J+HAciIfNAChs0B0QTwoRqjt8Z
-Wr9/6x3iGjjRXK9HkmuAtTClyY3YqzGBH9/CZjfTk6mFhnll0g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFvTCCA6WgAwIBAgIITxvUL1S7L0swDQYJKoZIhvcNAQEFBQAwRzELMAkGA1UE
-BhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMYU3dpc3NTaWdu
-IFNpbHZlciBDQSAtIEcyMB4XDTA2MTAyNTA4MzI0NloXDTM2MTAyNTA4MzI0Nlow
-RzELMAkGA1UEBhMCQ0gxFTATBgNVBAoTDFN3aXNzU2lnbiBBRzEhMB8GA1UEAxMY
-U3dpc3NTaWduIFNpbHZlciBDQSAtIEcyMIICIjANBgkqhkiG9w0BAQEFAAOCAg8A
-MIICCgKCAgEAxPGHf9N4Mfc4yfjDmUO8x/e8N+dOcbpLj6VzHVxumK4DV644N0Mv
-Fz0fyM5oEMF4rhkDKxD6LHmD9ui5aLlV8gREpzn5/ASLHvGiTSf5YXu6t+WiE7br
-YT7QbNHm+/pe7R20nqA1W6GSy/BJkv6FCgU+5tkL4k+73JU3/JHpMjUi0R86TieF
-nbAVlDLaYQ1HTWBCrpJH6INaUFjpiou5XaHc3ZlKHzZnu0jkg7Y360g6rw9njxcH
-6ATK72oxh9TAtvmUcXtnZLi2kUpCe2UuMGoM9ZDulebyzYLs2aFK7PayS+VFheZt
-eJMELpyCbTapxDFkH4aDCyr0NQp4yVXPQbBH6TCfmb5hqAaEuSh6XzjZG6k4sIN/
-c8HDO0gqgg8hm7jMqDXDhBuDsz6+pJVpATqJAHgE2cn0mRmrVn5bi4Y5FZGkECwJ
-MoBgs5PAKrYYC51+jUnyEEp/+dVGLxmSo5mnJqy7jDzmDrxHB9xzUfFwZC8I+bRH
-HTBsROopN4WSaGa8gzj+ezku01DwH/teYLappvonQfGbGHLy9YR0SslnxFSuSGTf
-jNFusB3hB48IHpmccelM2KX3RxIfdNFRnobzwqIjQAtz20um53MGjMGg6cFZrEb6
-5i/4z3GcRm25xBWNOHkDRUjvxF3XCO6HOSKGsg0PWEP3calILv3q1h8CAwEAAaOB
-rDCBqTAOBgNVHQ8BAf8EBAMCAQYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQU
-F6DNweRBtjpbO8tFnb0cwpj6hlgwHwYDVR0jBBgwFoAUF6DNweRBtjpbO8tFnb0c
-wpj6hlgwRgYDVR0gBD8wPTA7BglghXQBWQEDAQEwLjAsBggrBgEFBQcCARYgaHR0
-cDovL3JlcG9zaXRvcnkuc3dpc3NzaWduLmNvbS8wDQYJKoZIhvcNAQEFBQADggIB
-AHPGgeAn0i0P4JUw4ppBf1AsX19iYamGamkYDHRJ1l2E6kFSGG9YrVBWIGrGvShp
-WJHckRE1qTodvBqlYJ7YH39FkWnZfrt4csEGDyrOj4VwYaygzQu4OSlWhDJOhrs9
-xCrZ1x9y7v5RoSJBsXECYxqCsGKrXlcSH9/L3XWgwF15kIwb4FDm3jH+mHtwX6WQ
-2K34ArZv02DdQEsixT2tOnqfGhpHkXkzuoLcMmkDlm4fS/Bx/uNncqCxv1yL5PqZ
-IseEuRuNI5c/7SXgz2W79WEE790eslpBIlqhn10s6FvJbakMDHiqYMZWjwFaDGi8
-aRl5xB9+lwW/xekkUV7U1UtT7dkjWjYDZaPBA61BMPNGG4WQr2W11bHkFlt4dR2X
-em1ZqSqPe97Dh4kQmUlzeMg9vVE1dCrV8X5pGyq7O70luJpaPXJhkGaH7gzWTdQR
-dAtq/gsD/KNVV4n+SsuuWxcFyPKNIzFTONItaj+CuY0IavdeQXRuwxF+B6wpYJE/
-OMpXEA29MC/HpeZBoNquBYeaoKRlbEwJDIm6uNO5wJOKMPqN5ZprFQFOZ6raYlY+
-hAhm0sQ2fac+EPyI4NSA5QC9qvNOBqN6avlicuMJT+ubDgEj8Z+7fNzcbBGXJbLy
-tGMU0gYqZ4yD9c7qB9iaah7s5Aq7KkzrCWA5zspi2C5u
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIF2TCCA8GgAwIBAgIQXAuFXAvnWUHfV8w/f52oNjANBgkqhkiG9w0BAQUFADBk
-MQswCQYDVQQGEwJjaDERMA8GA1UEChMIU3dpc3Njb20xJTAjBgNVBAsTHERpZ2l0
-YWwgQ2VydGlmaWNhdGUgU2VydmljZXMxGzAZBgNVBAMTElN3aXNzY29tIFJvb3Qg
-Q0EgMTAeFw0wNTA4MTgxMjA2MjBaFw0yNTA4MTgyMjA2MjBaMGQxCzAJBgNVBAYT
-AmNoMREwDwYDVQQKEwhTd2lzc2NvbTElMCMGA1UECxMcRGlnaXRhbCBDZXJ0aWZp
-Y2F0ZSBTZXJ2aWNlczEbMBkGA1UEAxMSU3dpc3Njb20gUm9vdCBDQSAxMIICIjAN
-BgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEA0LmwqAzZuz8h+BvVM5OAFmUgdbI9
-m2BtRsiMMW8Xw/qabFbtPMWRV8PNq5ZJkCoZSx6jbVfd8StiKHVFXqrWW/oLJdih
-FvkcxC7mlSpnzNApbjyFNDhhSbEAn9Y6cV9Nbc5fuankiX9qUvrKm/LcqfmdmUc/
-TilftKaNXXsLmREDA/7n29uj/x2lzZAeAR81sH8A25Bvxn570e56eqeqDFdvpG3F
-EzuwpdntMhy0XmeLVNxzh+XTF3xmUHJd1BpYwdnP2IkCb6dJtDZd0KTeByy2dbco
-kdaXvij1mB7qWybJvbCXc9qukSbraMH5ORXWZ0sKbU/Lz7DkQnGMU3nn7uHbHaBu
-HYwadzVcFh4rUx80i9Fs/PJnB3r1re3WmquhsUvhzDdf/X/NTa64H5xD+SpYVUNF
-vJbNcA78yeNmuk6NO4HLFWR7uZToXTNShXEuT46iBhFRyePLoW4xCGQMwtI89Tbo
-19AOeCMgkckkKmUpWyL3Ic6DXqTz3kvTaI9GdVyDCW4pa8RwjPWd1yAv/0bSKzjC
-L3UcPX7ape8eYIVpQtPM+GP+HkM5haa2Y0EQs3MevNP6yn0WR+Kn1dCjigoIlmJW
-bjTb2QK5MHXjBNLnj8KwEUAKrNVxAmKLMb7dxiNYMUJDLXT5xp6mig/p/r+D5kNX
-JLrvRjSq1xIBOO0CAwEAAaOBhjCBgzAOBgNVHQ8BAf8EBAMCAYYwHQYDVR0hBBYw
-FDASBgdghXQBUwABBgdghXQBUwABMBIGA1UdEwEB/wQIMAYBAf8CAQcwHwYDVR0j
-BBgwFoAUAyUv3m+CATpcLNwroWm1Z9SM0/0wHQYDVR0OBBYEFAMlL95vggE6XCzc
-K6FptWfUjNP9MA0GCSqGSIb3DQEBBQUAA4ICAQA1EMvspgQNDQ/NwNurqPKIlwzf
-ky9NfEBWMXrrpA9gzXrzvsMnjgM+pN0S734edAY8PzHyHHuRMSG08NBsl9Tpl7Ik
-Vh5WwzW9iAUPWxAaZOHHgjD5Mq2eUCzneAXQMbFamIp1TpBcahQq4FJHgmDmHtqB
-sfsUC1rxn9KVuj7QG9YVHaO+htXbD8BJZLsuUBlL0iT43R4HVtA4oJVwIHaM190e
-3p9xxCPvgxNcoyQVTSlAPGrEqdi3pkSlDfTgnXceQHAm/NrZNuR55LU/vJtlvrsR
-ls/bxig5OgjOR1tTWsWZ/l2p3e9M1MalrQLmjAcSHm8D0W+go/MpvRLHUKKwf4ip
-mXeascClOS5cfGniLLDqN2qk4Vrh9VDlg++luyqI54zb/W1elxmofmZ1a3Hqv7HH
-b6D0jqTsNFFbjCYDcKF31QESVwA12yPeDooomf2xEG9L/zgtYE4snOtnta1J7ksf
-rK/7DZBaZmBwXarNeNQk7shBoJMBkpxqnvy5JMWzFYJ+vq6VK+uxwNrjAWALXmms
-hFZhvnEX/h0TD/7Gh0Xp/jKgGg0TpJRVcaUWi7rKibCyx/yP2FS1k2Kdzs9Z+z0Y
-zirLNRWCXf9UIltxUvu3yf5gmwBBZPCqKuy2QkPOiWaByIufOVQDJdMWNY6E0F/6
-MBr1mmz0DlP5OlvRHA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDXDCCAsWgAwIBAgICA+owDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF
-MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
-QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
-MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAyIENBMSkwJwYJKoZIhvcN
-AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla
-Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy
-ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y
-IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1
-c3RDZW50ZXIgQ2xhc3MgMiBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA
-dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANo46O0y
-AClxgwENv4wB3NrGrTmkqYov1YtcaF9QxmL1Zr3KkSLsqh1R1z2zUbKDTl3LSbDw
-TFXlay3HhQswHJJOgtTKAu33b77c4OMUuAVT8pr0VotanoWT0bSCVq5Nu6hLVxa8
-/vhYnvgpjbB7zXjJT6yLZwzxnPv8V5tXXE8NAgMBAAGjazBpMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3
-LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
-CSqGSIb3DQEBBAUAA4GBAIRS+yjf/x91AbwBvgRWl2p0QiQxg/lGsQaKic+WLDO/
-jLVfenKhhQbOhvgFjuj5Jcrag4wGrOs2bYWRNAQ29ELw+HkuCkhcq8xRT3h2oNms
-Gb0q0WkEKJHKNhAngFdb0lz1wlurZIFjdFH0l7/NEij3TWZ/p/AcASZ4smZHcFFk
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDXDCCAsWgAwIBAgICA+swDQYJKoZIhvcNAQEEBQAwgbwxCzAJBgNVBAYTAkRF
-MRAwDgYDVQQIEwdIYW1idXJnMRAwDgYDVQQHEwdIYW1idXJnMTowOAYDVQQKEzFU
-QyBUcnVzdENlbnRlciBmb3IgU2VjdXJpdHkgaW4gRGF0YSBOZXR3b3JrcyBHbWJI
-MSIwIAYDVQQLExlUQyBUcnVzdENlbnRlciBDbGFzcyAzIENBMSkwJwYJKoZIhvcN
-AQkBFhpjZXJ0aWZpY2F0ZUB0cnVzdGNlbnRlci5kZTAeFw05ODAzMDkxMTU5NTla
-Fw0xMTAxMDExMTU5NTlaMIG8MQswCQYDVQQGEwJERTEQMA4GA1UECBMHSGFtYnVy
-ZzEQMA4GA1UEBxMHSGFtYnVyZzE6MDgGA1UEChMxVEMgVHJ1c3RDZW50ZXIgZm9y
-IFNlY3VyaXR5IGluIERhdGEgTmV0d29ya3MgR21iSDEiMCAGA1UECxMZVEMgVHJ1
-c3RDZW50ZXIgQ2xhc3MgMyBDQTEpMCcGCSqGSIb3DQEJARYaY2VydGlmaWNhdGVA
-dHJ1c3RjZW50ZXIuZGUwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBALa0wTUF
-Lg2N7KBAahwOJ6ZQkmtQGwfeLud2zODa/ISoXoxjaitN2U4CdhHBC/KNecoAtvGw
-Dtf7pBc9r6tpepYnv68zoZoqWarEtTcI8hKlMbZD9TKWcSgoq40oht+77uMMfTDW
-w1Krj10nnGvAo+cFa1dJRLNu6mTP0o56UHd3AgMBAAGjazBpMA8GA1UdEwEB/wQF
-MAMBAf8wDgYDVR0PAQH/BAQDAgGGMDMGCWCGSAGG+EIBCAQmFiRodHRwOi8vd3d3
-LnRydXN0Y2VudGVyLmRlL2d1aWRlbGluZXMwEQYJYIZIAYb4QgEBBAQDAgAHMA0G
-CSqGSIb3DQEBBAUAA4GBABY9xs3Bu4VxhUafPiCPUSiZ7C1FIWMjWwS7TJC4iJIE
-Tb19AaM/9uzO8d7+feXhPrvGq14L3T2WxMup1Pkm5gZOngylerpuw3yCGdHHsbHD
-2w2Om0B8NwvxXej9H5CIpQ5ON2QhqE6NtJ/x3kit1VYYUimLRzQSCdS7kjXvD9s0
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEKzCCAxOgAwIBAgIEOsylTDANBgkqhkiG9w0BAQUFADBDMQswCQYDVQQGEwJE
-SzEVMBMGA1UEChMMVERDIEludGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQg
-Um9vdCBDQTAeFw0wMTA0MDUxNjMzMTdaFw0yMTA0MDUxNzAzMTdaMEMxCzAJBgNV
-BAYTAkRLMRUwEwYDVQQKEwxUREMgSW50ZXJuZXQxHTAbBgNVBAsTFFREQyBJbnRl
-cm5ldCBSb290IENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxLhA
-vJHVYx/XmaCLDEAedLdInUaMArLgJF/wGROnN4NrXceO+YQwzho7+vvOi20jxsNu
-Zp+Jpd/gQlBn+h9sHvTQBda/ytZO5GhgbEaqHF1j4QeGDmUApy6mcca8uYGoOn0a
-0vnRrEvLznWv3Hv6gXPU/Lq9QYjUdLP5Xjg6PEOo0pVOd20TDJ2PeAG3WiAfAzc1
-4izbSysseLlJ28TQx5yc5IogCSEWVmb/Bexb4/DPqyQkXsN/cHoSxNK1EKC2IeGN
-eGlVRGn1ypYcNIUXJXfi9i8nmHj9eQY6otZaQ8H/7AQ77hPv01ha/5Lr7K7a8jcD
-R0G2l8ktCkEiu7vmpwIDAQABo4IBJTCCASEwEQYJYIZIAYb4QgEBBAQDAgAHMGUG
-A1UdHwReMFwwWqBYoFakVDBSMQswCQYDVQQGEwJESzEVMBMGA1UEChMMVERDIElu
-dGVybmV0MR0wGwYDVQQLExRUREMgSW50ZXJuZXQgUm9vdCBDQTENMAsGA1UEAxME
-Q1JMMTArBgNVHRAEJDAigA8yMDAxMDQwNTE2MzMxN1qBDzIwMjEwNDA1MTcwMzE3
-WjALBgNVHQ8EBAMCAQYwHwYDVR0jBBgwFoAUbGQBx/2FbazI2p5QCIUItTxWqFAw
-HQYDVR0OBBYEFGxkAcf9hW2syNqeUAiFCLU8VqhQMAwGA1UdEwQFMAMBAf8wHQYJ
-KoZIhvZ9B0EABBAwDhsIVjUuMDo0LjADAgSQMA0GCSqGSIb3DQEBBQUAA4IBAQBO
-Q8zR3R0QGwZ/t6T609lN+yOfI1Rb5osvBCiLtSdtiaHsmGnc540mgwV5dOy0uaOX
-wTUA/RXaOYE6lTGQ3pfphqiZdwzlWqCE/xIWrG64jcN7ksKsLtB9KOy282A4aW8+
-2ARVPp7MVdK6/rtHBNcK2RYKNCn1WBPVT8+PVkuzHu7TmHnaCB4Mb7j4Fifvwm89
-9qNLPg7kbWzbO0ESm70NRyN/PErQr8Cv9u8btRXE64PECV90i9kR+8JWsTz4cMo0
-jUNAE4z9mQNUecYu6oah9jrUCbz0vGbMPVjQV0kK7iXiQe4T+Zs4NNEA9X7nlB38
-aQNiuJkFBT1reBK9sG9l
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGTCCBAGgAwIBAgIEPki9xDANBgkqhkiG9w0BAQUFADAxMQswCQYDVQQGEwJE
-SzEMMAoGA1UEChMDVERDMRQwEgYDVQQDEwtUREMgT0NFUyBDQTAeFw0wMzAyMTEw
-ODM5MzBaFw0zNzAyMTEwOTA5MzBaMDExCzAJBgNVBAYTAkRLMQwwCgYDVQQKEwNU
-REMxFDASBgNVBAMTC1REQyBPQ0VTIENBMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8A
-MIIBCgKCAQEArGL2YSCyz8DGhdfjeebM7fI5kqSXLmSjhFuHnEz9pPPEXyG9VhDr
-2y5h7JNp46PMvZnDBfwGuMo2HP6QjklMxFaaL1a8z3sM8W9Hpg1DTeLpHTk0zY0s
-2RKY+ePhwUp8hjjEqcRhiNJerxomTdXkoCJHhNlktxmW/OwZ5LKXJk5KTMuPJItU
-GBxIYXvViGjaXbXqzRowwYCDdlCqT9HU3Tjw7xb04QxQBr/q+3pJoSgrHPb8FTKj
-dGqPqcNiKXEx5TukYBdedObaE+3pHx8b0bJoc8YQNHVGEBDjkAB2QMuLt0MJIf+r
-TpPGWOmlgtt3xDqZsXKVSQTwtyv6e1mO3QIDAQABo4ICNzCCAjMwDwYDVR0TAQH/
-BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwgewGA1UdIASB5DCB4TCB3gYIKoFQgSkB
-AQEwgdEwLwYIKwYBBQUHAgEWI2h0dHA6Ly93d3cuY2VydGlmaWthdC5kay9yZXBv
-c2l0b3J5MIGdBggrBgEFBQcCAjCBkDAKFgNUREMwAwIBARqBgUNlcnRpZmlrYXRl
-ciBmcmEgZGVubmUgQ0EgdWRzdGVkZXMgdW5kZXIgT0lEIDEuMi4yMDguMTY5LjEu
-MS4xLiBDZXJ0aWZpY2F0ZXMgZnJvbSB0aGlzIENBIGFyZSBpc3N1ZWQgdW5kZXIg
-T0lEIDEuMi4yMDguMTY5LjEuMS4xLjARBglghkgBhvhCAQEEBAMCAAcwgYEGA1Ud
-HwR6MHgwSKBGoESkQjBAMQswCQYDVQQGEwJESzEMMAoGA1UEChMDVERDMRQwEgYD
-VQQDEwtUREMgT0NFUyBDQTENMAsGA1UEAxMEQ1JMMTAsoCqgKIYmaHR0cDovL2Ny
-bC5vY2VzLmNlcnRpZmlrYXQuZGsvb2Nlcy5jcmwwKwYDVR0QBCQwIoAPMjAwMzAy
-MTEwODM5MzBagQ8yMDM3MDIxMTA5MDkzMFowHwYDVR0jBBgwFoAUYLWF7FZkfhIZ
-J2cdUBVLc647+RIwHQYDVR0OBBYEFGC1hexWZH4SGSdnHVAVS3OuO/kSMB0GCSqG
-SIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIEkDANBgkqhkiG9w0BAQUFAAOCAQEACrom
-JkbTc6gJ82sLMJn9iuFXehHTuJTXCRBuo7E4A9G28kNBKWKnctj7fAXmMXAnVBhO
-inxO5dHKjHiIzxvTkIvmI/gLDjNDfZziChmPyQE+dF10yYscA+UYyAFMP8uXBV2Y
-caaYb7Z8vTd/vuGTJW1v8AqtFxjhA7wHKcitJuj4YfD9IQl+mo6paH1IYnK9AOoB
-mbgGglGBTvH1tJFUuSN6AJqfXY3gPGS5GhKSKseCRHI53OI8xthV9RVOyAUO28bQ
-YqbsFbS1AoLbrIyigfCbmTH1ICCoiGEKB5+U/NDXG8wuF/MEJ3Zn61SD/aSQfgY9
-BKNDLdr8C2LqL19iUw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID+zCCAuOgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBtzE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGDAJUUjEPMA0GA1UEBwwGQU5LQVJBMVYwVAYDVQQKDE0oYykg
-MjAwNSBUw5xSS1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8
-dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWeLjAeFw0wNTA1MTMxMDI3MTdaFw0xNTAz
-MjIxMDI3MTdaMIG3MT8wPQYDVQQDDDZUw5xSS1RSVVNUIEVsZWt0cm9uaWsgU2Vy
-dGlmaWthIEhpem1ldCBTYcSfbGF5xLFjxLFzxLExCzAJBgNVBAYMAlRSMQ8wDQYD
-VQQHDAZBTktBUkExVjBUBgNVBAoMTShjKSAyMDA1IFTDnFJLVFJVU1QgQmlsZ2kg
-xLBsZXRpxZ9pbSB2ZSBCaWxpxZ9pbSBHw7x2ZW5sacSfaSBIaXptZXRsZXJpIEEu
-xZ4uMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAylIF1mMD2Bxf3dJ7
-XfIMYGFbazt0K3gNfUW9InTojAPBxhEqPZW8qZSwu5GXyGl8hMW0kWxsE2qkVa2k
-heiVfrMArwDCBRj1cJ02i67L5BuBf5OI+2pVu32Fks66WJ/bMsW9Xe8iSi9BB35J
-YbOG7E6mQW6EvAPs9TscyB/C7qju6hJKjRTP8wrgUDn5CDX4EVmt5yLqS8oUBt5C
-urKZ8y1UiBAG6uEaPj1nH/vO+3yC6BFdSsG5FOpU2WabfIl9BJpiyelSPJ6c79L1
-JuTm5Rh8i27fbMx4W09ysstcP4wFjdFMjK2Sx+F4f2VsSQZQLJ4ywtdKxnWKWU51
-b0dewQIDAQABoxAwDjAMBgNVHRMEBTADAQH/MA0GCSqGSIb3DQEBBQUAA4IBAQAV
-9VX/N5aAWSGk/KEVTCD21F/aAyT8z5Aa9CEKmu46sWrv7/hg0Uw2ZkUd82YCdAR7
-kjCo3gp2D++Vbr3JN+YaDayJSFvMgzbC9UZcWYJWtNX+I7TYVBxEq8Sn5RTOPEFh
-fEPmzcSBCYsk+1Ql1haolgxnB2+zUEfjHCQo3SqYpGH+2+oSN7wBGjSFvW5P55Fy
-B0SFHljKVETd96y5y4khctuPwGkplyqjrhgjlxxBKot8KsF8kOipKMDTkcatKIdA
-aLX/7KfS0zgYnNN9aV3wxqUeJBujR/xpB2jn5Jq07Q+hh4cCzofSSE7hvP/L8XKS
-RGQDJereW26fyfJOrN3H
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEPDCCAySgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBvjE/MD0GA1UEAww2VMOc
-UktUUlVTVCBFbGVrdHJvbmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sx
-c8SxMQswCQYDVQQGEwJUUjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xS
-S1RSVVNUIEJpbGdpIMSwbGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kg
-SGl6bWV0bGVyaSBBLsWeLiAoYykgS2FzxLFtIDIwMDUwHhcNMDUxMTA3MTAwNzU3
-WhcNMTUwOTE2MTAwNzU3WjCBvjE/MD0GA1UEAww2VMOcUktUUlVTVCBFbGVrdHJv
-bmlrIFNlcnRpZmlrYSBIaXptZXQgU2HEn2xhecSxY8Sxc8SxMQswCQYDVQQGEwJU
-UjEPMA0GA1UEBwwGQW5rYXJhMV0wWwYDVQQKDFRUw5xSS1RSVVNUIEJpbGdpIMSw
-bGV0acWfaW0gdmUgQmlsacWfaW0gR8O8dmVubGnEn2kgSGl6bWV0bGVyaSBBLsWe
-LiAoYykgS2FzxLFtIDIwMDUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIB
-AQCpNn7DkUNMwxmYCMjHWHtPFoylzkkBH3MOrHUTpvqeLCDe2JAOCtFp0if7qnef
-J1Il4std2NiDUBd9irWCPwSOtNXwSadktx4uXyCcUHVPr+G1QRT0mJKIx+XlZEdh
-R3n9wFHxwZnn3M5q+6+1ATDcRhzviuyV79z/rxAc653YsKpqhRgNF8k+v/Gb0AmJ
-Qv2gQrSdiVFVKc8bcLyEVK3BEx+Y9C52YItdP5qtygy/p1Zbj3e41Z55SZI/4PGX
-JHpsmxcPbe9TmJEr5A++WXkHeLuXlfSfadRYhwqp48y2WBmfJiGxxFmNskF1wK1p
-zpwACPI2/z7woQ8arBT9pmAPAgMBAAGjQzBBMB0GA1UdDgQWBBTZN7NOBf3Zz58S
-Fq62iS/rJTqIHDAPBgNVHQ8BAf8EBQMDBwYAMA8GA1UdEwEB/wQFMAMBAf8wDQYJ
-KoZIhvcNAQEFBQADggEBAHJglrfJ3NgpXiOFX7KzLXb7iNcX/nttRbj2hWyfIvwq
-ECLsqrkw9qtY1jkQMZkpAL2JZkH7dN6RwRgLn7Vhy506vvWolKMiVW4XSf/SKfE4
-Jl3vpao6+XF75tpYHdN0wgH6PmlYX63LaL4ULptswLbcoCb6dxriJNoaN+BnrdFz
-gw2lGh1uEpJ+hGIAF728JRhX8tepb1mIvDS3LoV4nZbcFMMsilKbloxSZj2GFotH
-uFEJjOp9zYhys2AzsfAKRO8P9Qk3iCQOLGsgOqL6EfJANZxEaGM7rDNvY7wsu/LS
-y3Z9fYjYHcgFHW68lKlmjHdxx/qR+i9Rnuk5UrbnBEI=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFcjCCA1qgAwIBAgIQH51ZWtcvwgZEpYAIaeNe9jANBgkqhkiG9w0BAQUFADA/
-MQswCQYDVQQGEwJUVzEwMC4GA1UECgwnR292ZXJubWVudCBSb290IENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MB4XDTAyMTIwNTEzMjMzM1oXDTMyMTIwNTEzMjMzM1ow
-PzELMAkGA1UEBhMCVFcxMDAuBgNVBAoMJ0dvdmVybm1lbnQgUm9vdCBDZXJ0aWZp
-Y2F0aW9uIEF1dGhvcml0eTCCAiIwDQYJKoZIhvcNAQEBBQADggIPADCCAgoCggIB
-AJoluOzMonWoe/fOW1mKydGGEghU7Jzy50b2iPN86aXfTEc2pBsBHH8eV4qNw8XR
-IePaJD9IK/ufLqGU5ywck9G/GwGHU5nOp/UKIXZ3/6m3xnOUT0b3EEk3+qhZSV1q
-gQdW8or5BtD3cCJNtLdBuTK4sfCxw5w/cP1T3YGq2GN49thTbqGsaoQkclSGxtKy
-yhwOeYHWtXBiCAEuTk8O1RGvqa/lmr/czIdtJuTJV6L7lvnM4T9TjGxMfptTCAts
-F/tnyMKtsc2AtJfcdgEWFelq16TheEfOhtX7MfP6Mb40qij7cEwdScevLJ1tZqa2
-jWR+tSBqnTuBto9AAGdLiYa4zGX+FVPpBMHWXx1E1wovJ5pGfaENda1UhhXcSTvx
-ls4Pm6Dso3pdvtUqdULle96ltqqvKKyskKw4t9VoNSZ63Pc78/1Fm9G7Q3hub/FC
-VGqY8A2tl+lSXunVanLeavcbYBT0peS2cWeqH+riTcFCQP5nRhc4L0c/cZyu5SHK
-YS1tB6iEfC3uUSXxY5Ce/eFXiGvviiNtsea9P63RPZYLhY3Naye7twWb7LuRqQoH
-EgKXTiCQ8P8NHuJBO9NAOueNXdpm5AKwB1KYXA6OM5zCppX7VRluTI6uSw+9wThN
-Xo+EHWbNxWCWtFJaBYmOlXqYwZE8lSOyDvR5tMl8wUohAgMBAAGjajBoMB0GA1Ud
-DgQWBBTMzO/MKWCkO7GStjz6MmKPrCUVOzAMBgNVHRMEBTADAQH/MDkGBGcqBwAE
-MTAvMC0CAQAwCQYFKw4DAhoFADAHBgVnKgMAAAQUA5vwIhP/lSg209yewDL7MTqK
-UWUwDQYJKoZIhvcNAQEFBQADggIBAECASvomyc5eMN1PhnR2WPWus4MzeKR6dBcZ
-TulStbngCnRiqmjKeKBMmo4sIy7VahIkv9Ro04rQ2JyftB8M3jh+Vzj8jeJPXgyf
-qzvS/3WXy6TjZwj/5cAWtUgBfen5Cv8b5Wppv3ghqMKnI6mGq3ZW6A4M9hPdKmaK
-ZEk9GhiHkASfQlK3T8v+R0F2Ne//AHY2RTKbxkaFXeIksB7jSJaYV0eUVXoPQbFE
-JPPB/hprv4j9wabak2BegUqZIJxIZhm1AHlUD7gsL0u8qV1bYH+Mh6XgUmMqvtg7
-hUAV/h62ZT/FS9p+tXo1KaMuephgIqP0fSdOLeq0dDzpD6QzDxARvBMB1uUO07+1
-EqLhRSPAzAhuYbeJq4PjJB7mXQfnHyA+z2fI56wwbSdLaG5LKlwCCDTb+HbkZ6Mm
-nD+iMsJKxYEYMRBWqoTvLQr/uB930r+lWKBi5NdLkXWNiYCYfm3LU05er/ayl4WX
-udpVBrkk7tfGOB5jGxI7leFYrPLfhNVfmS8NVVvmONsuP3LpSIXLuykTjx44Vbnz
-ssQwmSNOXfJIoRIM3BKQCZBUkQM8R+XVyWXgt0t97EfTsws+rZ7QdAAO671RrcDe
-LMDDav7v3Aun+kbfYNucpllQdSNpc5Oy+fwC00fmcc4QAu4njIT/rEUNE1yDMuAl
-pYYsfPQS
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDITCCAoqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCByzELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFBlcnNvbmFsIEJhc2lj
-IENBMSgwJgYJKoZIhvcNAQkBFhlwZXJzb25hbC1iYXNpY0B0aGF3dGUuY29tMB4X
-DTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgcsxCzAJBgNVBAYTAlpBMRUw
-EwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEaMBgGA1UE
-ChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRpb24gU2Vy
-dmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQZXJzb25hbCBCYXNpYyBD
-QTEoMCYGCSqGSIb3DQEJARYZcGVyc29uYWwtYmFzaWNAdGhhd3RlLmNvbTCBnzAN
-BgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAvLyTU23AUE+CFeZIlDWmWr5vQvoPR+53
-dXLdjUmbllegeNTKP1GzaQuRdhciB5dqxFGTS+CN7zeVoQxN2jSQHReJl+A1OFdK
-wPQIcOk8RHtQfmGakOMj04gRRif1CwcOu93RfyAKiLlWCy4cgNrx454p7xS9CkT7
-G1sY0b8jkyECAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG9w0BAQQF
-AAOBgQAt4plrsD16iddZopQBHyvdEktTwq1/qqcAXJFAVyVKOKqEcLnZgA+le1z7
-c8a914phXAPjLSeoF+CEhULcXpvGt7Jtu3Sv5D/Lp7ew4F2+eIMllNLbgQ95B21P
-9DkVWlIBe94y1k049hJcBlDfBVu9FEuh3ym6O0GN92NWod8isQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDLTCCApagAwIBAgIBADANBgkqhkiG9w0BAQQFADCB0TELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEkMCIGA1UEAxMbVGhhd3RlIFBlcnNvbmFsIEZyZWVt
-YWlsIENBMSswKQYJKoZIhvcNAQkBFhxwZXJzb25hbC1mcmVlbWFpbEB0aGF3dGUu
-Y29tMB4XDTk2MDEwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgdExCzAJBgNVBAYT
-AlpBMRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEa
-MBgGA1UEChMRVGhhd3RlIENvbnN1bHRpbmcxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xJDAiBgNVBAMTG1RoYXd0ZSBQZXJzb25hbCBG
-cmVlbWFpbCBDQTErMCkGCSqGSIb3DQEJARYccGVyc29uYWwtZnJlZW1haWxAdGhh
-d3RlLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA1GnX1LCUZFtx6UfY
-DFG26nKRsIRefS0Nj3sS34UldSh0OkIsYyeflXtL734Zhx2G6qPduc6WZBrCFG5E
-rHzmj+hND3EfQDimAKOHePb5lIZererAXnbr2RSjXW56fAylS1V/Bhkpf56aJtVq
-uzgkCGqYx7Hao5iR/Xnb5VrEHLkCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zAN
-BgkqhkiG9w0BAQQFAAOBgQDH7JJ+Tvj1lqVnYiqk8E0RYNBvjWBYYawmu1I1XAjP
-MPuoSpaKH2JCI4wXD/S6ZJwXrEcp352YXtJsYHFcoqzceePnbgBHH7UNKOgCneSa
-/RP0ptl8sfjcXyMmCZGAc9AUG95DqYMl8uacLxXK/qarigd1iwzdUYRr5PjRznei
-gQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDKTCCApKgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBzzELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMRowGAYD
-VQQKExFUaGF3dGUgQ29uc3VsdGluZzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBT
-ZXJ2aWNlcyBEaXZpc2lvbjEjMCEGA1UEAxMaVGhhd3RlIFBlcnNvbmFsIFByZW1p
-dW0gQ0ExKjAoBgkqhkiG9w0BCQEWG3BlcnNvbmFsLXByZW1pdW1AdGhhd3RlLmNv
-bTAeFw05NjAxMDEwMDAwMDBaFw0yMDEyMzEyMzU5NTlaMIHPMQswCQYDVQQGEwJa
-QTEVMBMGA1UECBMMV2VzdGVybiBDYXBlMRIwEAYDVQQHEwlDYXBlIFRvd24xGjAY
-BgNVBAoTEVRoYXd0ZSBDb25zdWx0aW5nMSgwJgYDVQQLEx9DZXJ0aWZpY2F0aW9u
-IFNlcnZpY2VzIERpdmlzaW9uMSMwIQYDVQQDExpUaGF3dGUgUGVyc29uYWwgUHJl
-bWl1bSBDQTEqMCgGCSqGSIb3DQEJARYbcGVyc29uYWwtcHJlbWl1bUB0aGF3dGUu
-Y29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDJZtn4B0TPuYwu8KHvE0Vs
-Bd/eJxZRNkERbGw77f4QfRKe5ZtCmv5gMcNmt3M6SK5O0DI3lIi1DbbZ8/JE2dWI
-Et12TfIa/G8jHnrx2JhFTgcQ7xZC0EN1bUre4qrJMf8fAHB8Zs8QJQi6+u4A6UYD
-ZicRFTuqW/KY3TZCstqIdQIDAQABoxMwETAPBgNVHRMBAf8EBTADAQH/MA0GCSqG
-SIb3DQEBBAUAA4GBAGk2ifc0KjNyL2071CKyuG+axTZmDhs8obF1Wub9NdP4qPIH
-b4Vnjt4rueIXsDqg8A6iAJrf8xQVbrvIhVqYgPn/vnQdPfP+MCXRNzRn+qVxeTBh
-KXLA4CxM+1bkOqhv5TJZUtt1KFBZDPgLGeSs2a+WjS9Q2wfD6h+rM+D1KzGJ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDJzCCApCgAwIBAgIBATANBgkqhkiG9w0BAQQFADCBzjELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEhMB8GA1UEAxMYVGhhd3RlIFByZW1pdW0gU2Vy
-dmVyIENBMSgwJgYJKoZIhvcNAQkBFhlwcmVtaXVtLXNlcnZlckB0aGF3dGUuY29t
-MB4XDTk2MDgwMTAwMDAwMFoXDTIwMTIzMTIzNTk1OVowgc4xCzAJBgNVBAYTAlpB
-MRUwEwYDVQQIEwxXZXN0ZXJuIENhcGUxEjAQBgNVBAcTCUNhcGUgVG93bjEdMBsG
-A1UEChMUVGhhd3RlIENvbnN1bHRpbmcgY2MxKDAmBgNVBAsTH0NlcnRpZmljYXRp
-b24gU2VydmljZXMgRGl2aXNpb24xITAfBgNVBAMTGFRoYXd0ZSBQcmVtaXVtIFNl
-cnZlciBDQTEoMCYGCSqGSIb3DQEJARYZcHJlbWl1bS1zZXJ2ZXJAdGhhd3RlLmNv
-bTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0jY2aovXwlue2oFBYo847kkE
-VdbQ7xwblRZH7xhINTpS9CtqBo87L+pW46+GjZ4X9560ZXUCTe/LCaIhUdib0GfQ
-ug2SBhRz1JPLlyoAnFxODLz6FVL88kRu2hFKbgifLy3j+ao6hnO2RlNYyIkFvYMR
-uHM/qgeN9EJN50CdHDcCAwEAAaMTMBEwDwYDVR0TAQH/BAUwAwEB/zANBgkqhkiG
-9w0BAQQFAAOBgQAmSCwWwlj66BZ0DKqqX1Q/8tfJeGBeXm43YyJ3Nn6yF8Q0ufUI
-hfzJATj/Tb7yFkJD57taRvvBxhEf8UqwKEbJw8RCfbz6q1lu1bdRiBHjpIUZa4JM
-pAwSremkrj/xw0llmozFyD4lt5SZu5IycQfwhl7tUCemDaYj+bvLpgcUQg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDEzCCAnygAwIBAgIBATANBgkqhkiG9w0BAQQFADCBxDELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYD
-VQQKExRUaGF3dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlv
-biBTZXJ2aWNlcyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEm
-MCQGCSqGSIb3DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wHhcNOTYwODAx
-MDAwMDAwWhcNMjAxMjMxMjM1OTU5WjCBxDELMAkGA1UEBhMCWkExFTATBgNVBAgT
-DFdlc3Rlcm4gQ2FwZTESMBAGA1UEBxMJQ2FwZSBUb3duMR0wGwYDVQQKExRUaGF3
-dGUgQ29uc3VsdGluZyBjYzEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNl
-cyBEaXZpc2lvbjEZMBcGA1UEAxMQVGhhd3RlIFNlcnZlciBDQTEmMCQGCSqGSIb3
-DQEJARYXc2VydmVyLWNlcnRzQHRoYXd0ZS5jb20wgZ8wDQYJKoZIhvcNAQEBBQAD
-gY0AMIGJAoGBANOkUG7I/1Zr5s9dtuoMaHVHoqrC2oQl/Kj0R1HahbUgdJSGHg91
-yekIYfUGbTBuFRkC6VLAYttNmZ7iagxEOM3+vuNkCXDF/rFrKbYvScg71CcEJRCX
-L+eQbcAoQpnXTEPew/UhbVSfXcNY4cDk2VuwuNy0e982OsK1ZiIS1ocNAgMBAAGj
-EzARMA8GA1UdEwEB/wQFMAMBAf8wDQYJKoZIhvcNAQEEBQADgYEAB/pMaVz7lcxG
-7oWDTSEwjsrZqG9JGubaUeNgcGyEYRGhGshIPllDfU+VPaGLtwtimHp1it2ITk6e
-QNuozDJ0uW8NxuOzRAvZim+aKZuZGCg70eNAKJpaPNW15yAbi8qkq43pUdniTCxZ
-qdq5snUb9kLy78fyGPmJvKP/iiMucEc=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICoTCCAgqgAwIBAgIBADANBgkqhkiG9w0BAQQFADCBizELMAkGA1UEBhMCWkEx
-FTATBgNVBAgTDFdlc3Rlcm4gQ2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzAN
-BgNVBAoTBlRoYXd0ZTEdMBsGA1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAd
-BgNVBAMTFlRoYXd0ZSBUaW1lc3RhbXBpbmcgQ0EwHhcNOTcwMTAxMDAwMDAwWhcN
-MjAxMjMxMjM1OTU5WjCBizELMAkGA1UEBhMCWkExFTATBgNVBAgTDFdlc3Rlcm4g
-Q2FwZTEUMBIGA1UEBxMLRHVyYmFudmlsbGUxDzANBgNVBAoTBlRoYXd0ZTEdMBsG
-A1UECxMUVGhhd3RlIENlcnRpZmljYXRpb24xHzAdBgNVBAMTFlRoYXd0ZSBUaW1l
-c3RhbXBpbmcgQ0EwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBANYrWHhhRYZT
-6jR7UZztsOYuGA7+4F+oJ9O0yeB8WU4WDnNUYMF/9p8u6TqFJBU820cEY8OexJQa
-Wt9MevPZQx08EHp5JduQ/vBR5zDWQQD9nyjfeb6Uu522FOMjhdepQeBMpHmwKxqL
-8vg7ij5FrHGSALSQQZj7X+36ty6K+Ig3AgMBAAGjEzARMA8GA1UdEwEB/wQFMAMB
-Af8wDQYJKoZIhvcNAQEEBQADgYEAZ9viwuaHPUCDhjc1fR/OmsMMZiCouqoEiYbC
-9RAIDb/LogWK0E02PvTX72nGXuSwlG9KuefeW4i2e9vjJ+V2w/A1wcu1J5szedyQ
-pgCed/r8zSeUQhac0xxo7L9c3eWpexAKMnRUEzGLhQOEkbdYATAUOK8oyvyxUBkZ
-CayJSdM=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEZDCCA0ygAwIBAgIQRL4Mi1AAJLQR0zYwS8AzdzANBgkqhkiG9w0BAQUFADCB
-ozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VSRmlyc3Qt
-TmV0d29yayBBcHBsaWNhdGlvbnMwHhcNOTkwNzA5MTg0ODM5WhcNMTkwNzA5MTg1
-NzQ5WjCBozELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0
-IExha2UgQ2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYD
-VQQLExhodHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xKzApBgNVBAMTIlVUTi1VU0VS
-Rmlyc3QtTmV0d29yayBBcHBsaWNhdGlvbnMwggEiMA0GCSqGSIb3DQEBAQUAA4IB
-DwAwggEKAoIBAQCz+5Gh5DZVhawGNFugmliy+LUPBXeDrjKxdpJo7CNKyXY/45y2
-N3kDuatpjQclthln5LAbGHNhSuh+zdMvZOOmfAz6F4CjDUeJT1FxL+78P/m4FoCH
-iZMlIJpDgmkkdihZNaEdwH+DBmQWICzTSaSFtMBhf1EI+GgVkYDLpdXuOzr0hARe
-YFmnjDRy7rh4xdE7EkpvfmUnuaRVxblvQ6TFHSyZwFKkeEwVs0CYCGtDxgGwenv1
-axwiP8vv/6jQOkt2FZ7S0cYu49tXGzKiuG/ohqY/cKvlcJKrRB5AUPuco2LkbG6g
-yN7igEL66S/ozjIEj3yNtxyjNTwV3Z7DrpelAgMBAAGjgZEwgY4wCwYDVR0PBAQD
-AgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFPqGydvguul49Uuo1hXf8NPh
-ahQ8ME8GA1UdHwRIMEYwRKBCoECGPmh0dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9V
-VE4tVVNFUkZpcnN0LU5ldHdvcmtBcHBsaWNhdGlvbnMuY3JsMA0GCSqGSIb3DQEB
-BQUAA4IBAQCk8yXM0dSRgyLQzDKrm5ZONJFUICU0YV8qAhXhi6r/fWRRzwr/vH3Y
-IWp4yy9Rb/hCHTO967V7lMPDqaAt39EpHx3+jz+7qEUqf9FuVSTiuwL7MT++6Lzs
-QCv4AdRWOOTKRIK1YSAhZ2X28AvnNPilwpyjXEAfhZOVBt5P1CeptqX8Fs1zMT+4
-ZSfP1FMa8Kxun08FDAOBp4QpxFq9ZFdyrTvPNximmMatBrTcCKME1SmklpoSZ0qM
-YEWd8SOasACcaLWYUNPvji6SZbFIPiG+FTAqDbUMo2s/rn9X9R+WfN9v3YIwLGUb
-QErNaLly7HF27FSOH4UMAWr6pjisH8SE
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEXjCCA0agAwIBAgIQRL4Mi1AAIbQR0ypoBqmtaTANBgkqhkiG9w0BAQUFADCB
-kzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xGzAZBgNVBAMTElVUTiAtIERBVEFDb3Jw
-IFNHQzAeFw05OTA2MjQxODU3MjFaFw0xOTA2MjQxOTA2MzBaMIGTMQswCQYDVQQG
-EwJVUzELMAkGA1UECBMCVVQxFzAVBgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYD
-VQQKExVUaGUgVVNFUlRSVVNUIE5ldHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cu
-dXNlcnRydXN0LmNvbTEbMBkGA1UEAxMSVVROIC0gREFUQUNvcnAgU0dDMIIBIjAN
-BgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA3+5YEKIrblXEjr8uRgnn4AgPLit6
-E5Qbvfa2gI5lBZMAHryv4g+OGQ0SR+ysraP6LnD43m77VkIVni5c7yPeIbkFdicZ
-D0/Ww5y0vpQZY/KmEQrrU0icvvIpOxboGqBMpsn0GFlowHDyUwDAXlCCpVZvNvlK
-4ESGoE1O1kduSUrLZ9emxAW5jh70/P/N5zbgnAVssjMiFdC04MwXwLLA9P4yPykq
-lXvY8qdOD1R8oQ2AswkDwf9c3V6aPryuvEeKaq5xyh+xKrhfQgUL7EYw0XILyulW
-bfXv33i+Ybqypa4ETLyorGkVl73v67SMvzX41MPRKA5cOp9wGDMgd8SirwIDAQAB
-o4GrMIGoMAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1UdDgQWBBRT
-MtGzz3/64PGgXYVOktKeRR20TzA9BgNVHR8ENjA0MDKgMKAuhixodHRwOi8vY3Js
-LnVzZXJ0cnVzdC5jb20vVVROLURBVEFDb3JwU0dDLmNybDAqBgNVHSUEIzAhBggr
-BgEFBQcDAQYKKwYBBAGCNwoDAwYJYIZIAYb4QgQBMA0GCSqGSIb3DQEBBQUAA4IB
-AQAnNZcAiosovcYzMB4p/OL31ZjUQLtgyr+rFywJNn9Q+kHcrpY6CiM+iVnJowft
-Gzet/Hy+UUla3joKVAgWRcKZsYfNjGjgaQPpxE6YsjuMFrMOoAyYUJuTqXAJyCyj
-j98C5OBxOvG0I3KgqgHf35g+FFCgMSa9KOlaMCZ1+XtgHI3zzVAmbQQnmt/VDUVH
-KWss5nbZqSl9Mt3JNjy9rjXxEZ4du5A/EkdOjtd+D2JzHVImOBwYSf0wdJrE5SIv
-2MCN7ZF6TACPcn9d2t0bi0Vr591pl6jFVkwPDPafepE39peC4N1xaf92P2BNPM/3
-mfnGV/TJVTl4uix5yaaIK/QI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEojCCA4qgAwIBAgIQRL4Mi1AAJLQR0zYlJWfJiTANBgkqhkiG9w0BAQUFADCB
-rjELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xNjA0BgNVBAMTLVVUTi1VU0VSRmlyc3Qt
-Q2xpZW50IEF1dGhlbnRpY2F0aW9uIGFuZCBFbWFpbDAeFw05OTA3MDkxNzI4NTBa
-Fw0xOTA3MDkxNzM2NThaMIGuMQswCQYDVQQGEwJVUzELMAkGA1UECBMCVVQxFzAV
-BgNVBAcTDlNhbHQgTGFrZSBDaXR5MR4wHAYDVQQKExVUaGUgVVNFUlRSVVNUIE5l
-dHdvcmsxITAfBgNVBAsTGGh0dHA6Ly93d3cudXNlcnRydXN0LmNvbTE2MDQGA1UE
-AxMtVVROLVVTRVJGaXJzdC1DbGllbnQgQXV0aGVudGljYXRpb24gYW5kIEVtYWls
-MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAsjmFpPJ9q0E7YkY3rs3B
-YHW8OWX5ShpHornMSMxqmNVNNRm5pELlzkniii8efNIxB8dOtINknS4p1aJkxIW9
-hVE1eaROaJB7HHqkkqgX8pgV8pPMyaQylbsMTzC9mKALi+VuG6JG+ni8om+rWV6l
-L8/K2m2qL+usobNqqrcuZzWLeeEeaYji5kbNoKXqvgvOdjp6Dpvq/NonWz1zHyLm
-SGHGTPNpsaguG7bUMSAsvIKKjqQOpdeJQ/wWWq8dcdcRWdq6hw2v+vPhwvCkxWeM
-1tZUOt4KpLoDd7NlyP0e03RiqhjKaJMeoYV+9Udly/hNVyh00jT/MLbu9mIwFIws
-6wIDAQABo4G5MIG2MAsGA1UdDwQEAwIBxjAPBgNVHRMBAf8EBTADAQH/MB0GA1Ud
-DgQWBBSJgmd9xJ0mcABLtFBIfN49rgRufTBYBgNVHR8EUTBPME2gS6BJhkdodHRw
-Oi8vY3JsLnVzZXJ0cnVzdC5jb20vVVROLVVTRVJGaXJzdC1DbGllbnRBdXRoZW50
-aWNhdGlvbmFuZEVtYWlsLmNybDAdBgNVHSUEFjAUBggrBgEFBQcDAgYIKwYBBQUH
-AwQwDQYJKoZIhvcNAQEFBQADggEBALFtYV2mGn98q0rkMPxTbyUkxsrt4jFcKw7u
-7mFVbwQ+zznexRtJlOTrIEy05p5QLnLZjfWqo7NK2lYcYJeA3IKirUq9iiv/Cwm0
-xtcgBEXkzYABurorbs6q15L+5K/r9CYdFip/bDCVNy8zEqx/3cfREYxRmLLQo5HQ
-rfafnoOTHh1CuEava2bwm3/q4wMC5QJRwarVNZ1yQAOJujEdxRBoUp7fooXFXAim
-eOZTT7Hot9MUnpOmw2TjrH5xzbyf6QMbzPvprDHBr3wVdAKZw7JHpsIyYdfHb0gk
-USeh1YdV8nuPmD0Wnu51tvjQjvLzxq4oW6fw8zYX/MMF08oDSlQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEdDCCA1ygAwIBAgIQRL4Mi1AAJLQR0zYq/mUK/TANBgkqhkiG9w0BAQUFADCB
-lzELMAkGA1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2Ug
-Q2l0eTEeMBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExho
-dHRwOi8vd3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3Qt
-SGFyZHdhcmUwHhcNOTkwNzA5MTgxMDQyWhcNMTkwNzA5MTgxOTIyWjCBlzELMAkG
-A1UEBhMCVVMxCzAJBgNVBAgTAlVUMRcwFQYDVQQHEw5TYWx0IExha2UgQ2l0eTEe
-MBwGA1UEChMVVGhlIFVTRVJUUlVTVCBOZXR3b3JrMSEwHwYDVQQLExhodHRwOi8v
-d3d3LnVzZXJ0cnVzdC5jb20xHzAdBgNVBAMTFlVUTi1VU0VSRmlyc3QtSGFyZHdh
-cmUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCx98M4P7Sof885glFn
-0G2f0v9Y8+efK+wNiVSZuTiZFvfgIXlIwrthdBKWHTxqctU8EGc6Oe0rE81m65UJ
-M6Rsl7HoxuzBdXmcRl6Nq9Bq/bkqVRcQVLMZ8Jr28bFdtqdt++BxF2uiiPsA3/4a
-MXcMmgF6sTLjKwEHOG7DpV4jvEWbe1DByTCP2+UretNb+zNAHqDVmBe8i4fDidNd
-oI6yqqr2jmmIBsX6iSHzCJ1pLgkzmykNRg+MzEk0sGlRvfkGzWitZky8PqxhvQqI
-DsjfPe58BEydCl5rkdbux+0ojatNh4lz0G6k0B4WixThdkQDf2Os5M1JnMWS9Ksy
-oUhbAgMBAAGjgbkwgbYwCwYDVR0PBAQDAgHGMA8GA1UdEwEB/wQFMAMBAf8wHQYD
-VR0OBBYEFKFyXyYbKJhDlV0HN9WFlp1L0sNFMEQGA1UdHwQ9MDswOaA3oDWGM2h0
-dHA6Ly9jcmwudXNlcnRydXN0LmNvbS9VVE4tVVNFUkZpcnN0LUhhcmR3YXJlLmNy
-bDAxBgNVHSUEKjAoBggrBgEFBQcDAQYIKwYBBQUHAwUGCCsGAQUFBwMGBggrBgEF
-BQcDBzANBgkqhkiG9w0BAQUFAAOCAQEARxkP3nTGmZev/K0oXnWO6y1n7k57K9cM
-//bey1WiCuFMVGWTYGufEpytXoMs61quwOQt9ABjHbjAbPLPSbtNk28Gpgoiskli
-CE7/yMgUsogWXecB5BKV5UU0s4tpvc+0hY91UZ59Ojg6FEgSxvunOxqNDYJAB+gE
-CJChicsZUN/KHAG8HQQZexB2lzvukJDKxA4fFm517zP4029bHpbj4HR3dHuKom4t
-3XbWOTCC8KucUvIqx69JXn7HaOWCgchqJ/kniCrVWFCVH/A7HFe7fRQ5YiuayZSS
-KqMiDP+JJn1fIytH1xUdqWqeUQ0qUZ6B+dQ7XnASfxAynB67nfhmqA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNTIyMjM0OFoXDTE5MDYy
-NTIyMjM0OFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDEgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYWYJ6ibiWuqYvaG9Y
-LqdUHAZu9OqNSLwxlBfw8068srg1knaw0KWlAdcAAxIiGQj4/xEjm84H9b9pGib+
-TunRf50sQB1ZaG6m+FiwnRqP0z/x3BkGgagO4DrdyFNFCQbmD3DD+kCmDuJWBQ8Y
-TfwggtFzVXSNdnKgHZ0dwN0/cQIDAQABMA0GCSqGSIb3DQEBBQUAA4GBAFBoPUn0
-LBwGlN+VYH+Wexf+T3GtZMjdd9LvWVXoP+iOBSoh8gfStadS/pyxtuJbdxdA6nLW
-I8sogTLDAHkY7FkXicnGah5xyf23dKUlRWnFSKsZ4UWKJWsZ7uW7EvV/96aNUcPw
-nXS3qT6gpf+2SQMT2iLM7XGCK5nPOrf1LXLI
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE0zCCA7ugAwIBAgIQGNrRniZ96LtKIVjNzGs7SjANBgkqhkiG9w0BAQUFADCB
-yjELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQL
-ExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJp
-U2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxW
-ZXJpU2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0
-aG9yaXR5IC0gRzUwHhcNMDYxMTA4MDAwMDAwWhcNMzYwNzE2MjM1OTU5WjCByjEL
-MAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMR8wHQYDVQQLExZW
-ZXJpU2lnbiBUcnVzdCBOZXR3b3JrMTowOAYDVQQLEzEoYykgMjAwNiBWZXJpU2ln
-biwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5MUUwQwYDVQQDEzxWZXJp
-U2lnbiBDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9y
-aXR5IC0gRzUwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvJAgIKXo1
-nmAMqudLO07cfLw8RRy7K+D+KQL5VwijZIUVJ/XxrcgxiV0i6CqqpkKzj/i5Vbex
-t0uz/o9+B1fs70PbZmIVYc9gDaTY3vjgw2IIPVQT60nKWVSFJuUrjxuf6/WhkcIz
-SdhDY2pSS9KP6HBRTdGJaXvHcPaz3BJ023tdS1bTlr8Vd6Gw9KIl8q8ckmcY5fQG
-BO+QueQA5N06tRn/Arr0PO7gi+s3i+z016zy9vA9r911kTMZHRxAy3QkGSGT2RT+
-rCpSx4/VBEnkjWNHiDxpg8v+R70rfk/Fla4OndTRQ8Bnc+MUCH7lP59zuDMKz10/
-NIeWiu5T6CUVAgMBAAGjgbIwga8wDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8E
-BAMCAQYwbQYIKwYBBQUHAQwEYTBfoV2gWzBZMFcwVRYJaW1hZ2UvZ2lmMCEwHzAH
-BgUrDgMCGgQUj+XTGoasjY5rw8+AatRIGCx7GS4wJRYjaHR0cDovL2xvZ28udmVy
-aXNpZ24uY29tL3ZzbG9nby5naWYwHQYDVR0OBBYEFH/TZafC3ey78DAJ80M5+gKv
-MzEzMA0GCSqGSIb3DQEBBQUAA4IBAQCTJEowX2LP2BqYLz3q3JktvXf2pXkiOOzE
-p6B4Eq1iDkVwZMXnl2YtmAl+X6/WzChl8gGqCBpH3vn5fJJaCGkgDdk+bW48DW7Y
-5gaRQBi5+MHt39tBquCWIMnNZBU4gcmU7qKEKQsTb47bDN0lAtukixlE0kF6BWlK
-WE9gyn6CagsCqiUXObXbf+eEZSqVir2G3l6BFoMtEMze/aiCKm0oHw0LxOXnGiYZ
-4fQRbxC1lfznQgUy286dUV4otp6F01vvpX1FQHKOtw5rDgb7MzVIcbidJ4vEZV8N
-hnacRHr2lVz2XTIIM6RUthg/aFzyQkqFOFSDX9HoLPKsEdao7WNq
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPTCCAaYCEQDNun9W8N/kvFT+IqyzcqpVMA0GCSqGSIb3DQEBAgUAMF8xCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw05
-NjAxMjkwMDAwMDBaFw0yODA4MDEyMzU5NTlaMF8xCzAJBgNVBAYTAlVTMRcwFQYD
-VQQKEw5WZXJpU2lnbiwgSW5jLjE3MDUGA1UECxMuQ2xhc3MgMSBQdWJsaWMgUHJp
-bWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTCBnzANBgkqhkiG9w0BAQEFAAOB
-jQAwgYkCgYEA5Rm/baNWYS2ZSHH2Z965jeu3noaACpEO+jglr0aIguVzqKCbJF0N
-H8xlbgyw0FaEGIeaBpsQoXPftFg5a27B9hXVqKg/qhIGjTGsf7A01480Z4gJzRQR
-4k5FVmkfeAKA2txHkSm7NsljXMXg1y2He6G3MrB7MLoqLzGq7qNn2tsCAwEAATAN
-BgkqhkiG9w0BAQIFAAOBgQBMP7iLxmjf7kMzDl3ppssHhE16M/+SG/Q2rdiVIjZo
-EWx8QszznC7EBz8UsA9P/5CSdvnivErpj82ggAr3xSnxgiJduLHdgSOjeyUVRjB5
-FvjqBUuUfx3CHMjjt/QQQDwTw18fU+hI5Ia0e6E1sHslurjTjqs/OJ0ANACY89Fx
-lA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEEzH6qqYPnHTkxD4PTqJkZIwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMSBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMSBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQCq0Lq+Fi24g9TK0g+8djHKlNgdk4xWArzZbxpvUjZudVYK
-VdPfQ4chEWWKfo+9Id5rMj8bhDSVBZ1BNeuS65bdqlk/AVNtmU/t5eIqWpDBucSm
-Fc/IReumXY6cPvBkJHalzasab7bYe1FhbqZ/h8jit+U03EGI6glAvnOSPWvndQID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAKlPww3HZ74sy9mozS11534Vnjty637rXC0J
-h9ZrbWB85a7FkCMMXErQr7Fd88e2CtvgFZMN3QO8x3aKtd1Pw5sTdbgBwObJW2ul
-uIncrKTdcu1OofdPvAbT6shkdHvClUGcZXNY8ZCaPGqxmMnEh7zPRW1F4m4iP/68
-DzFc6PLZ
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCLW3VWhFSFCwDPrzhIzrGkMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDEgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAN2E1Lm0+afY8wR4
-nN493GwTFtl63SRRZsDHJlkNrAYIwpTRMx/wgzUfbhvI3qpuFU5UJ+/EbRrsC+MO
-8ESlV8dAWB6jRx9x7GD2bZTIGDnt/kIYVt/kTEkQeE4BdjVjEjbdZrwBBDajVWjV
-ojYJrKshJlQGrT/KFOCsyq0GHZXi+J3x4GD/wn91K0zM2v6HmSHquv4+VNfSWXjb
-PG7PoBMAGrgnoeS+Z5bKoMWznN3JdZ7rMJpfo83ZrngZPyPpXNspva1VyBtUjGP2
-6KbqxzcSXKMpHgLZ2x87tNcPVkeBFQRKr4Mn0cVYiMHd9qqnoxjaaKptEVHhv2Vr
-n5Z20T0CAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAq2aN17O6x5q25lXQBfGfMY1a
-qtmqRiYPce2lrVNWYgFHKkTp/j90CxObufRNG7LRX7K20ohcs5/Ny9Sn2WCVhDr4
-wTcdYcrnsMXlkdpUpqwxga6X3s0IrLjAl4B/bnKk52kTlWUfxJM8/XmPBNQ+T+r3
-ns7NZ3xPZQL/kYVUc8f/NveGLezQXk//EZ9yBta4GvFMDSZl4kSAHsef493oCtrs
-pSCAaWihT37ha88HQfqDjrw43bAuEbFrskLMmrz5SCJ5ShkPshw+IHTZasO+8ih4
-E1Z5T21Q6huwtVexN2ZYI/PcD98Kh8TvhgXVOBRgmaNL3gaWcSzy27YfpO8/7g==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEC0b/EoXjaOR6+f/9YtFvgswDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAyIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAyIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQC2WoujDWojg4BrzzmH9CETMwZMJaLtVRKXxaeAufqDwSCg+i8VDXyh
-YGt+eSz6Bg86rvYbb7HS/y8oUl+DfUvEerf4Zh+AVPy3wo5ZShRXRtGak75BkQO7
-FYCTXOvnzAhsPz6zSvz/S2wj1VCCJkQZjiPDceoZJEcEnnW/yKYAHwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBAIobK/o5wXTXXtgZZKJYSi034DNHD6zt96rbHuSLBlxg
-J8pFUs4W7z8GZOeUaHxgMxURaa+dYo2jA1Rrpr7l7gUYYAS/QoD90KioHgE796Nc
-r6Pc5iaAIzy4RHT3Cq5Ji2F4zCS/iIqnDupzGUH9TQPwiNHleI2lKk/2lw0Xd8rY
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAzCCAmwCEQC5L2DMiJ+hekYJuFtwbIqvMA0GCSqGSIb3DQEBBQUAMIHBMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0Ns
-YXNzIDIgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBH
-MjE6MDgGA1UECxMxKGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9y
-aXplZCB1c2Ugb25seTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazAe
-Fw05ODA1MTgwMDAwMDBaFw0yODA4MDEyMzU5NTlaMIHBMQswCQYDVQQGEwJVUzEX
-MBUGA1UEChMOVmVyaVNpZ24sIEluYy4xPDA6BgNVBAsTM0NsYXNzIDIgUHVibGlj
-IFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkgLSBHMjE6MDgGA1UECxMx
-KGMpIDE5OTggVmVyaVNpZ24sIEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25s
-eTEfMB0GA1UECxMWVmVyaVNpZ24gVHJ1c3QgTmV0d29yazCBnzANBgkqhkiG9w0B
-AQEFAAOBjQAwgYkCgYEAp4gBIXQs5xoD8JjhlzwPIQjxnNuX6Zr8wgQGE75fUsjM
-HiwSViy4AWkszJkfrbCWrnkE8hM5wXuYuggs6MKEEyyqaekJ9MepAqRCwiNPStjw
-DqL7MWzJ5m+ZJwf15vRMeJ5t60aG+rmGyVTyssSv1EYcWskVMP8NbPUtDm3Of3cC
-AwEAATANBgkqhkiG9w0BAQUFAAOBgQByLvl/0fFx+8Se9sVeUYpAmLho+Jscg9ji
-nb3/7aHmZuovCfTK1+qlK5X2JGCGTUQug6XELaDTrnhpb3LabK4I8GOSN+a7xDAX
-rXfMSTWqz9iP0b63GJZHc2pUIjRkLbYWm1lbtFFZOrMLFPQS32eg9K0yZF6xRnIn
-jBJ7xUS0rg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGTCCAwECEGFwy0mMX5hFKeewptlQW3owDQYJKoZIhvcNAQEFBQAwgcoxCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVy
-aVNpZ24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24s
-IEluYy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNp
-Z24gQ2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0
-eSAtIEczMB4XDTk5MTAwMTAwMDAwMFoXDTM2MDcxNjIzNTk1OVowgcoxCzAJBgNV
-BAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjEfMB0GA1UECxMWVmVyaVNp
-Z24gVHJ1c3QgTmV0d29yazE6MDgGA1UECxMxKGMpIDE5OTkgVmVyaVNpZ24sIElu
-Yy4gLSBGb3IgYXV0aG9yaXplZCB1c2Ugb25seTFFMEMGA1UEAxM8VmVyaVNpZ24g
-Q2xhc3MgMiBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAt
-IEczMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEArwoNwtUs22e5LeWU
-J92lvuCwTY+zYVY81nzD9M0+hsuiiOLh2KRpxbXiv8GmR1BeRjmL1Za6tW8UvxDO
-JxOeBUebMXoT2B/Z0wI3i60sR/COgQanDTAM6/c8DyAd3HJG7qUCyFvDyVZpTMUY
-wZF7C9UTAJu878NIPkZgIIUq1ZC2zYugzDLdt/1AVbJQHFauzI13TccgTacxdu9o
-koqQHgiBVrKtaaNS0MscxCM9H5n+TOgWY47GCI72MfbS+uV23bUckqNJzc0BzWjN
-qWm6o+sdDZykIKbBoMXRRkwXbdKsZj+WjOCE1Db/IlnF+RFgqF8EffIa9iVCYQ/E
-Srg+iQIDAQABMA0GCSqGSIb3DQEBBQUAA4IBAQA0JhU8wI1NQ0kdvekhktdmnLfe
-xbjQ5F1fdiLAJvmEOjr5jLX77GDx6M4EsMjdpwOPMPOY36TmpDHf0xwLRtxyID+u
-7gU8pDM/CzmscHhzS5kr3zDCVLCoO1Wh/hYozUK9dG6A2ydEp85EXdQbkJgNHkKU
-sQAsBNB0owIFImNjzYO1+8FtYmtpdf1dcEG59b98377BMnMiIYtYgXsVkXq642RI
-sH/7NiXaldDxJBQX3RiAa0YjOVT1jmIJBB2UkKab5iXiQkWquJCtvgiPqQtCGJTP
-cjnhsUPgKM+351psE2tJs//jGHyJizNdrDPXp/naOlXJWBD5qu9ats9LS98q
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICPDCCAaUCEHC65B0Q2Sk0tjjKewPMur8wDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFz
-cyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk2
-MDEyOTAwMDAwMFoXDTI4MDgwMTIzNTk1OVowXzELMAkGA1UEBhMCVVMxFzAVBgNV
-BAoTDlZlcmlTaWduLCBJbmMuMTcwNQYDVQQLEy5DbGFzcyAzIFB1YmxpYyBQcmlt
-YXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGfMA0GCSqGSIb3DQEBAQUAA4GN
-ADCBiQKBgQDJXFme8huKARS0EN8EQNvjV69qRUCPhAwL0TPZ2RHP7gJYHyX3KqhE
-BarsAx94f56TuZoAqiN91qyFomNFx3InzPRMxnVx0jnvT0Lwdd8KkMaOIG+YD/is
-I19wKTakyYbnsZogy1Olhec9vn2a/iRFM9x2Fe0PonFkTGUugWhFpwIDAQABMA0G
-CSqGSIb3DQEBAgUAA4GBALtMEivPLCYATxQT3ab7/AoRhIzzKBxnki98tsX63/Do
-lbwdj2wsqFHMc9ikwFPwTtYmwHYBV4GSXiHx0bH/59AhWM1pF+NEHJwZRDmJXNyc
-AA9WjQKZ7aKQRUzkuxCkPfAyAw7xzvjoyVGM5mKf5p/AfbdynMk2OmufTqj/ZA1k
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEH3Z/gfPqB63EHln+6eJNMYwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgMyBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgMyBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDMXtERXVxp0KvTuWpMmR9ZmDCOFoUgRm1HP9SFIIThbbP4
-pO0M8RcPO/mn+SXXwc+EY/J8Y8+iR/LGWzOOZEAEaMGAuWQcRXfH2G71lSk8UOg0
-13gfqLptQ5GVj0VXXn7F+8qkBOvqlzdUMG+7AUcyM83cV5tkaWH4mx0ciU9cZwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAFFNzb5cy5gZnBWyATl4Lk0PZ3BwmcYQWpSk
-U01UbSuvDV1Ai2TT1+7eVmGSX6bEHRBhNtMsJzzoKQm5EWR0zLVznxxIqbxhAe7i
-F6YM40AIOw7n60RzKprxaZLvcRTDOaxxp5EJb+RxBrO6WVcmeQD2+A2iMzAo1KpY
-oJ2daZH9
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQCbfgZJoz5iudXukEhxKe9XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDMgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAMu6nFL8eB8aHm8b
-N3O9+MlrlBIwT/A2R/XQkQr1F8ilYcEWQE37imGQ5XYgwREGfassbqb1EUGO+i2t
-KmFZpGcmTNDovFJbcCAEWNF6yaRpvIMXZK0Fi7zQWM6NjPXr8EJJC52XJ2cybuGu
-kxUccLwgTS8Y3pKI6GyFVxEa6X7jJhFUokWWVYPKMIno3Nij7SqAP395ZVc+FSBm
-CC+Vk7+qRy+oRpfwEuL+wgorUeZ25rdGt+INpsyow0xZVYnm6FNcHOqd8GIWC6fJ
-Xwzw3sJ2zq/3avL6QaaiMxTJ5Xpj055iN9WFZZ4O5lMkdBteHRJTW8cs54NJOxWu
-imi5V5cCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAERSWwauSCPc/L8my/uRan2Te
-2yFPhpk0djZX3dAVL8WtfxUfN2JzPtTnX84XA9s1+ivbrmAJXx5fj267Cz3qWhMe
-DGBvtcC1IyIuBwvLqXTLR7sdwdela8wv0kL9Sd2nic9TutoAWii/gt/4uhMdUIaC
-/Y4wjylGsB49Ndo4YhYYSq3mtlFs3q9i6wHQHiT+eo8SGhJouPtmmRQURVyu565p
-F4ErWjfJXir0xuKhXFSbplQAz/DxwceYMBo7Nhbbo27q/a2ywtrvAkcTisDxszGt
-TxzhT5yvDwyd93gN2PQ1VoDat20Xj50egWTh/sVFuq1ruQp6Tk9LhO5L8X3dEQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDAjCCAmsCEDKIjprS9esTR/h/xCA3JfgwDQYJKoZIhvcNAQEFBQAwgcExCzAJ
-BgNVBAYTAlVTMRcwFQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xh
-c3MgNCBQdWJsaWMgUHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcy
-MTowOAYDVQQLEzEoYykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3Jp
-emVkIHVzZSBvbmx5MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMB4X
-DTk4MDUxODAwMDAwMFoXDTI4MDgwMTIzNTk1OVowgcExCzAJBgNVBAYTAlVTMRcw
-FQYDVQQKEw5WZXJpU2lnbiwgSW5jLjE8MDoGA1UECxMzQ2xhc3MgNCBQdWJsaWMg
-UHJpbWFyeSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eSAtIEcyMTowOAYDVQQLEzEo
-YykgMTk5OCBWZXJpU2lnbiwgSW5jLiAtIEZvciBhdXRob3JpemVkIHVzZSBvbmx5
-MR8wHQYDVQQLExZWZXJpU2lnbiBUcnVzdCBOZXR3b3JrMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQC68OTP+cSuhVS5B1f5j8V/aBH4xBewRNzjMHPVKmIquNDM
-HO0oW369atyzkSTKQWI8/AIBvxwWMZQFl3Zuoq29YRdsTjCG8FE3KlDHqGKB3FtK
-qsGgtG7rL+VXxbErQHDbWk2hjh+9Ax/YA9SPTJlxvOKCzFjomDqG04Y48wApHwID
-AQABMA0GCSqGSIb3DQEBBQUAA4GBAIWMEsGnuVAVess+rLhDityq3RS6iYF+ATwj
-cSGIL4LcY/oCRaxFWdcqWERbt5+BO5JoPeI3JPV7bI92NZYJqFmduc4jq3TWg/0y
-cyfYaT5DdPauxYma51N86Xv2S/PBZYPejYqcPIiNOVn8qj8ijaHBZlCBckztImRP
-T8qAkbYp
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEGjCCAwICEQDsoKeLbnVqAc/EfMwvlF7XMA0GCSqGSIb3DQEBBQUAMIHKMQsw
-CQYDVQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZl
-cmlTaWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWdu
-LCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlT
-aWduIENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3Jp
-dHkgLSBHMzAeFw05OTEwMDEwMDAwMDBaFw0zNjA3MTYyMzU5NTlaMIHKMQswCQYD
-VQQGEwJVUzEXMBUGA1UEChMOVmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlT
-aWduIFRydXN0IE5ldHdvcmsxOjA4BgNVBAsTMShjKSAxOTk5IFZlcmlTaWduLCBJ
-bmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxRTBDBgNVBAMTPFZlcmlTaWdu
-IENsYXNzIDQgUHVibGljIFByaW1hcnkgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkg
-LSBHMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAK3LpRFpxlmr8Y+1
-GQ9Wzsy1HyDkniYlS+BzZYlZ3tCD5PUPtbut8XzoIfzk6AzufEUiGXaStBO3IFsJ
-+mGuqPKljYXCKtbeZjbSmwL0qJJgfJxptI8kHtCGUvYynEFYHiK9zUVilQhu0Gbd
-U6LM8BDcVHOLBKFGMzNcF0C5nk3T875Vg+ixiY5afJqWIpA7iCXy0lOIAgwLePLm
-NxdLMEYH5IBtptiWLugs+BGzOA1mppvqySNb247i8xOOGlktqgLw7KSHZtzBP/XY
-ufTsgsbSPZUd5cBPhMnZo0QoBmrXRazwa2rvTl/4EYIeOGM0ZlDUPpNz+jDDZq3/
-ky2X7wMCAwEAATANBgkqhkiG9w0BAQUFAAOCAQEAj/ola09b5KROJ1WrIhVZPMq1
-CtRK26vdoV9TxaBXOcLORyu+OshWv8LZJxA6sQU8wHcxuzrTBXttmhwwjIDLk5Mq
-g6sFUYICABFna/OIYUdfA5PVWw3g8dShMjWFsjrbsIKr0csKvE+MW8VLADsfKoKm
-fjaF3H48ZwC15DtS4KjrXRX5xm3wrR0OhbepmnMUWluPQSjA1egtTaRezarZ7c7c
-2NU8Qh0XwRJdRTjDOPP8hS6DRkiy1yBfkjaP53kPmF6Z6PDQpLv1U70qzlmwr25/
-bLvSHgCwIe34QWKCudiyxLtGUPMxxY8BqHTr9Xgn2uf3ZkPznoM+IKrDNWCRzg==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIICNDCCAaECEAKtZn5ORf5eV288mBle3cAwDQYJKoZIhvcNAQECBQAwXzELMAkG
-A1UEBhMCVVMxIDAeBgNVBAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYD
-VQQLEyVTZWN1cmUgU2VydmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MB4XDTk0
-MTEwOTAwMDAwMFoXDTEwMDEwNzIzNTk1OVowXzELMAkGA1UEBhMCVVMxIDAeBgNV
-BAoTF1JTQSBEYXRhIFNlY3VyaXR5LCBJbmMuMS4wLAYDVQQLEyVTZWN1cmUgU2Vy
-dmVyIENlcnRpZmljYXRpb24gQXV0aG9yaXR5MIGbMA0GCSqGSIb3DQEBAQUAA4GJ
-ADCBhQJ+AJLOesGugz5aqomDV6wlAXYMra6OLDfO6zV4ZFQD5YRAUcm/jwjiioII
-0haGN1XpsSECrXZogZoFokvJSyVmIlZsiAeP94FZbYQHZXATcXY+m3dM41CJVphI
-uR2nKRoTLkoRWZweFdVJVCxzOmmCsZc5nG1wZ0jl3S3WyB57AgMBAAEwDQYJKoZI
-hvcNAQECBQADfgBl3X7hsuyw4jrg7HFGmhkRuNPHoLQDQCYCPgmc4RKz0Vr2N6W3
-YQO2WxZpO8ZECAyIUwxrl0nHPjXcbLm7qt9cuzovk2C2qUtN8iD3zV9/ZHuO3ABc
-1/p3yjkWWW8O6tO1g39NTUJWdrTJXwT4OPjr0l91X817/OWOgHz8UA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDzTCCAzagAwIBAgIQU2GyYK7bcY6nlLMTM/QHCTANBgkqhkiG9w0BAQUFADCB
-wTELMAkGA1UEBhMCVVMxFzAVBgNVBAoTDlZlcmlTaWduLCBJbmMuMTwwOgYDVQQL
-EzNDbGFzcyAzIFB1YmxpYyBQcmltYXJ5IENlcnRpZmljYXRpb24gQXV0aG9yaXR5
-IC0gRzIxOjA4BgNVBAsTMShjKSAxOTk4IFZlcmlTaWduLCBJbmMuIC0gRm9yIGF1
-dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdv
-cmswHhcNMDAwOTI2MDAwMDAwWhcNMTAwOTI1MjM1OTU5WjCBpTEXMBUGA1UEChMO
-VmVyaVNpZ24sIEluYy4xHzAdBgNVBAsTFlZlcmlTaWduIFRydXN0IE5ldHdvcmsx
-OzA5BgNVBAsTMlRlcm1zIG9mIHVzZSBhdCBodHRwczovL3d3dy52ZXJpc2lnbi5j
-b20vcnBhIChjKTAwMSwwKgYDVQQDEyNWZXJpU2lnbiBUaW1lIFN0YW1waW5nIEF1
-dGhvcml0eSBDQTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEA0hmdZ8IAIVli
-zrQJIkRpivglWtvtDbc2fk7gu5Q+kCWHwmFHKdm9VLhjzCx9abQzNvQ3B5rB3UBU
-/OB4naCTuQk9I1F/RMIUdNsKvsvJMDRAmD7Q1yUQgZS9B0+c1lQn3y6ov8uQjI11
-S7zi6ESHzeZBCiVu6PQkAsVSD27smHUCAwEAAaOB3zCB3DAPBgNVHRMECDAGAQH/
-AgEAMEUGA1UdIAQ+MDwwOgYMYIZIAYb4RQEHFwEDMCowKAYIKwYBBQUHAgEWHGh0
-dHBzOi8vd3d3LnZlcmlzaWduLmNvbS9ycGEwMQYDVR0fBCowKDAmoCSgIoYgaHR0
-cDovL2NybC52ZXJpc2lnbi5jb20vcGNhMy5jcmwwCwYDVR0PBAQDAgEGMEIGCCsG
-AQUFBwEBBDYwNDAyBggrBgEFBQcwAaYmFiRodHRwOi8vb2NzcC52ZXJpc2lnbi5j
-b20vb2NzcC9zdGF0dXMwDQYJKoZIhvcNAQEFBQADgYEAgnBold+2DcIBcBlK0lRW
-HqzyRUyHuPU163hLBanInTsZIS5wNEqi9YngFXVF5yg3ADQnKeg3S/LvRJdrF1Ea
-w1adPBqK9kpGRjeM+sv1ZFo4aC4cw+9wzrhGBha/937ntag+RaypJXUie28/sJyU
-58dzq6wf7iWbwBbtt8pb8BQ=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDgDCCAmigAwIBAgICAx4wDQYJKoZIhvcNAQEFBQAwYTELMAkGA1UEBhMCVVMx
-DTALBgNVBAoTBFZJU0ExLzAtBgNVBAsTJlZpc2EgSW50ZXJuYXRpb25hbCBTZXJ2
-aWNlIEFzc29jaWF0aW9uMRIwEAYDVQQDEwlHUCBSb290IDIwHhcNMDAwODE2MjI1
-MTAwWhcNMjAwODE1MjM1OTAwWjBhMQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklT
-QTEvMC0GA1UECxMmVmlzYSBJbnRlcm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRp
-b24xEjAQBgNVBAMTCUdQIFJvb3QgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCC
-AQoCggEBAKkBcLWqxEDwq2omYXkZAPy/mzdZDK9vZBv42pWUJGkzEXDK41Z0ohdX
-ZFwgBuHW73G3O/erwWnQSaSxBNf0V2KJXLB1LRckaeNCYOTudNargFbYiCjh+20i
-/SN8RnNPflRzHqgsVVh1t0zzWkWlAhr62p3DRcMiXvOL8WAp0sdftAw6UYPvMPjU
-58fy+pmjIlC++QU3o63tmsPm7IgbthknGziLgE3sucfFicv8GjLtI/C1AVj59o/g
-halMCXI5Etuz9c9OYmTaxhkVOmMd6RdVoUwiPDQyRvhlV7or7zaMavrZ2UT0qt2E
-1w0cslSsMoW0ZA3eQbuxNMYBhjJk1Z8CAwEAAaNCMEAwHQYDVR0OBBYEFJ59SzS/
-ca3CBfYDdYDOqU8axCRMMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEG
-MA0GCSqGSIb3DQEBBQUAA4IBAQAhpXYUVfmtJ3CPPPTVbMjMCqujmAuKBiPFyWHb
-mQdpNSYx/scuhMKZYdQN6X0uEyt8joW2hcdLzzW2LEc9zikv2G+fiRxkk78IvXbQ
-kIqUs38oW26sTTMs7WXcFsziza6kPWKSBpUmv9+55CCmc2rBvveURNZNbyoLaxhN
-dBA2aGpawWqn3TYpjLgwi08hPwAuVDAHOrqK5MOeyti12HvOdUVmB/RtLdh6yumJ
-ivIj2C/LbgA2T/vwLwHMD8AiZfSr4k5hLQOCfZEWtTDVFN5ex5D8ofyrEK9ca3Cn
-B+8phuiyJccg/ybdd+95RBTEvd07xQObdyPsoOy7Wjm1zK0G
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDojCCAoqgAwIBAgIQE4Y1TR0/BvLB+WUF1ZAcYjANBgkqhkiG9w0BAQUFADBr
-MQswCQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRl
-cm5hdGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNv
-bW1lcmNlIFJvb3QwHhcNMDIwNjI2MDIxODM2WhcNMjIwNjI0MDAxNjEyWjBrMQsw
-CQYDVQQGEwJVUzENMAsGA1UEChMEVklTQTEvMC0GA1UECxMmVmlzYSBJbnRlcm5h
-dGlvbmFsIFNlcnZpY2UgQXNzb2NpYXRpb24xHDAaBgNVBAMTE1Zpc2EgZUNvbW1l
-cmNlIFJvb3QwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCvV95WHm6h
-2mCxlCfLF9sHP4CFT8icttD0b0/Pmdjh28JIXDqsOTPHH2qLJj0rNfVIsZHBAk4E
-lpF7sDPwsRROEW+1QK8bRaVK7362rPKgH1g/EkZgPI2h4H3PVz4zHvtH8aoVlwdV
-ZqW1LS7YgFmypw23RuwhY/81q6UCzyr0TP579ZRdhE2o8mCP2w4lPJ9zcc+U30rq
-299yOIzzlr3xF7zSujtFWsan9sYXiwGd/BmoKoMWuDpI/k4+oKsGGelT84ATB+0t
-vz8KPFUgOSwsAGl0lUq8ILKpeeUYiZGo3BxN77t+Nwtd/jmliFKMAGzsGHxBvfaL
-dXe6YJ2E5/4tAgMBAAGjQjBAMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQD
-AgEGMB0GA1UdDgQWBBQVOIMPPyw/cDMezUb+B4wg4NfDtzANBgkqhkiG9w0BAQUF
-AAOCAQEAX/FBfXxcCLkr4NWSR/pnXKUTwwMhmytMiUbPWU3J/qVAtmPN3XEolWcR
-zCSs00Rsca4BIGsDoo8Ytyk6feUWYFN4PMCvFYP3j1IzJL1kk5fui/fbGKhtcbP3
-LBfQdCVp9/5rPJS+TUtBjE7ic9DjkCJzQ83z7+pzzkWKsKZJ/0x9nXGIxHYdkFsd
-7v3M9+79YKWxehZx0RbQfBI8bGmX265fOZpwLwU8GUYEmSA20GBuYQa7FkKMcPcw
-++DbZqMAAb3mLNqRX6BGi01qnD093QVG/na/oAo85ADmJ7f/hC3euiInlhBx6yLt
-398znM/jra6O1I7mT1GvFpLgXPYHDw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEvTCCA6WgAwIBAgIBATANBgkqhkiG9w0BAQUFADCBhTELMAkGA1UEBhMCVVMx
-IDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxs
-cyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDcxMjEzMTcwNzU0WhcNMjIxMjE0
-MDAwNzU0WjCBhTELMAkGA1UEBhMCVVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdl
-bGxzU2VjdXJlMRwwGgYDVQQLDBNXZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQD
-DC1XZWxsc1NlY3VyZSBQdWJsaWMgUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkw
-ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDub7S9eeKPCCGeOARBJe+r
-WxxTkqxtnt3CxC5FlAM1iGd0V+PfjLindo8796jE2yljDpFoNoqXjopxaAkH5OjU
-Dk/41itMpBb570OYj7OeUt9tkTmPOL13i0Nj67eT/DBMHAGTthP796EfvyXhdDcs
-HqRePGj4S78NuR4uNuip5Kf4D8uCdXw1LSLWwr8L87T8bJVhHlfXBIEyg1J55oNj
-z7fLY4sR4r1e6/aN7ZVyKLSsEmLpSjPmgzKuBXWVvYSV2ypcm44uDLiBK0HmOFaf
-SZtsdvqKXfcBeYF8wYNABf5x/Qw/zE5gCQ5lRxAvAcAFP4/4s0HvWkJ+We/Slwxl
-AgMBAAGjggE0MIIBMDAPBgNVHRMBAf8EBTADAQH/MDkGA1UdHwQyMDAwLqAsoCqG
-KGh0dHA6Ly9jcmwucGtpLndlbGxzZmFyZ28uY29tL3dzcHJjYS5jcmwwDgYDVR0P
-AQH/BAQDAgHGMB0GA1UdDgQWBBQmlRkQ2eihl5H/3BnZtQQ+0nMKajCBsgYDVR0j
-BIGqMIGngBQmlRkQ2eihl5H/3BnZtQQ+0nMKaqGBi6SBiDCBhTELMAkGA1UEBhMC
-VVMxIDAeBgNVBAoMF1dlbGxzIEZhcmdvIFdlbGxzU2VjdXJlMRwwGgYDVQQLDBNX
-ZWxscyBGYXJnbyBCYW5rIE5BMTYwNAYDVQQDDC1XZWxsc1NlY3VyZSBQdWJsaWMg
-Um9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHmCAQEwDQYJKoZIhvcNAQEFBQADggEB
-ALkVsUSRzCPIK0134/iaeycNzXK7mQDKfGYZUMbVmO2rvwNa5U3lHshPcZeG1eMd
-/ZDJPHV3V3p9+N701NX3leZ0bh08rnyd2wIDBSxxSyU+B+NemvVmFymIGjifz6pB
-A4SXa5M4esowRBskRDPQ5NHcKDj0E0M1NSljqHyita04pO2t/caaH/+Xc/77szWn
-k4bGdpEA5qxRFsQnMlzbc9qlk1eOPm01JghZ1edE13YgY+esE2fDbbFwRnzVlhE9
-iW9dqKHrjQrawx0zbKPqZxmamX9LPYNRKh3KL4YMon4QLSvUFpULB6ouFJJJtylv
-2G0xffX8oRAHh84vWdw+WNs=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID5TCCAs2gAwIBAgIEOeSXnjANBgkqhkiG9w0BAQUFADCBgjELMAkGA1UEBhMC
-VVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSwwKgYDVQQLEyNXZWxscyBGYXJnbyBD
-ZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0GA1UEAxMmV2VsbHMgRmFyZ28gUm9v
-dCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwHhcNMDAxMDExMTY0MTI4WhcNMjEwMTE0
-MTY0MTI4WjCBgjELMAkGA1UEBhMCVVMxFDASBgNVBAoTC1dlbGxzIEZhcmdvMSww
-KgYDVQQLEyNXZWxscyBGYXJnbyBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTEvMC0G
-A1UEAxMmV2VsbHMgRmFyZ28gUm9vdCBDZXJ0aWZpY2F0ZSBBdXRob3JpdHkwggEi
-MA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDVqDM7Jvk0/82bfuUER84A4n13
-5zHCLielTWi5MbqNQ1mXx3Oqfz1cQJ4F5aHiidlMuD+b+Qy0yGIZLEWukR5zcUHE
-SxP9cMIlrCL1dQu3U+SlK93OvRw6esP3E48mVJwWa2uv+9iWsWCaSOAlIiR5NM4O
-JgALTqv9i86C1y8IcGjBqAr5dE8Hq6T54oN+J3N0Prj5OEL8pahbSCOz6+MlsoCu
-ltQKnMJ4msZoGK43YjdeUXWoWGPAUe5AeH6orxqg4bB4nVCMe+ez/I4jsNtlAHCE
-AQgAFG5Uhpq6zPk3EPbg3oQtnaSFN9OH4xXQwReQfhkhahKpdv0SAulPIV4XAgMB
-AAGjYTBfMA8GA1UdEwEB/wQFMAMBAf8wTAYDVR0gBEUwQzBBBgtghkgBhvt7hwcB
-CzAyMDAGCCsGAQUFBwIBFiRodHRwOi8vd3d3LndlbGxzZmFyZ28uY29tL2NlcnRw
-b2xpY3kwDQYJKoZIhvcNAQEFBQADggEBANIn3ZwKdyu7IvICtUpKkfnRLb7kuxpo
-7w6kAOnu5+/u9vnldKTC2FJYxHT7zmu1Oyl5GFrvm+0fazbuSCUlFLZWohDo7qd/
-0D+j0MNdJu4HzMPBJCGHHt8qElNvQRbn7a6U+oxy+hNH8Dx+rn0ROhPs7fpvcmR7
-nX1/Jv16+yWt6j4pf0zjAFcysLPp7VMX2YuyFA4w6OXVE8Zkr8QA1dhYJPz1j+zx
-x32l2w8n0cbyQIjmH/ZhqPRCyLk306m+LFZ4wnKbWV01QIroTmMatukgalHizqSQ
-33ZwmVxwQ023tqcZZE6St8WRPH9IFmV7Fv3L/PvZ1dZPIWU7Sn9Ho/s=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEMDCCAxigAwIBAgIQUJRs7Bjq1ZxN1ZfvdY+grTANBgkqhkiG9w0BAQUFADCB
-gjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3dy54cmFtcHNlY3VyaXR5LmNvbTEk
-MCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2VydmljZXMgSW5jMS0wKwYDVQQDEyRY
-UmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkwHhcNMDQxMTAxMTcx
-NDA0WhcNMzUwMTAxMDUzNzE5WjCBgjELMAkGA1UEBhMCVVMxHjAcBgNVBAsTFXd3
-dy54cmFtcHNlY3VyaXR5LmNvbTEkMCIGA1UEChMbWFJhbXAgU2VjdXJpdHkgU2Vy
-dmljZXMgSW5jMS0wKwYDVQQDEyRYUmFtcCBHbG9iYWwgQ2VydGlmaWNhdGlvbiBB
-dXRob3JpdHkwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCYJB69FbS6
-38eMpSe2OAtp87ZOqCwuIR1cRN8hXX4jdP5efrRKt6atH67gBhbim1vZZ3RrXYCP
-KZ2GG9mcDZhtdhAoWORlsH9KmHmf4MMxfoArtYzAQDsRhtDLooY2YKTVMIJt2W7Q
-DxIEM5dfT2Fa8OT5kavnHTu86M/0ay00fOJIYRyO82FEzG+gSqmUsE3a56k0enI4
-qEHMPJQRfevIpoy3hsvKMzvZPTeL+3o+hiznc9cKV6xkmxnr9A8ECIqsAxcZZPRa
-JSKNNCyy9mgdEm3Tih4U2sSPpuIjhdV6Db1q4Ons7Be7QhtnqiXtRYMh/MHJfNVi
-PvryxS3T/dRlAgMBAAGjgZ8wgZwwEwYJKwYBBAGCNxQCBAYeBABDAEEwCwYDVR0P
-BAQDAgGGMA8GA1UdEwEB/wQFMAMBAf8wHQYDVR0OBBYEFMZPoj0GY4QJnM5i5ASs
-jVy16bYbMDYGA1UdHwQvMC0wK6ApoCeGJWh0dHA6Ly9jcmwueHJhbXBzZWN1cml0
-eS5jb20vWEdDQS5jcmwwEAYJKwYBBAGCNxUBBAMCAQEwDQYJKoZIhvcNAQEFBQAD
-ggEBAJEVOQMBG2f7Shz5CmBbodpNl2L5JFMn14JkTpAuw0kbK5rc/Kh4ZzXxHfAR
-vbdI4xD2Dd8/0sm2qlWkSLoC295ZLhVbO50WfUfXN+pfTXYSNrsf16GBBEYgoyxt
-qZ4Bfj8pzgCT3/3JknOJiWSe5yvkHJEs0rnOfc5vMZnT5r7SHpDwCRR5XCOrTdLa
-IR9NmXmd4c8nnxCbHIgNsIpkQTG4DmyQJKSbXHGPurt+HBvbaoAPIbzp26a3QPSy
-i6mx5O+aGtA9aZnuqCij4Tyz8LIRnM98QObd50N9otg6tamN8jSZxNQQ4Qb9CYQQ
-O+7ETPTsJ3xCwnR8gooJybQDJbw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFajCCBFKgAwIBAgIEPLU9RjANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
-YmVUUlVTVGVkIFJvb3QgQ0EtQmFsdGltb3JlIEltcGxlbWVudGF0aW9uMB4XDTAy
-MDQxMTA3Mzg1MVoXDTIyMDQxMTA3Mzg1MVowZjESMBAGA1UEChMJYmVUUlVTVGVk
-MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
-ZCBSb290IENBLUJhbHRpbW9yZSBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALx+xDmcjOPWHIb/ymKt4H8wRXqOGrO4x/nRNv8i
-805qX4QQ+2aBw5R5MdKR4XeOGCrDFN5R9U+jK7wYFuK13XneIviCfsuBH/0nLI/6
-l2Qijvj/YaOcGx6Sj8CoCd8JEey3fTGaGuqDIQY8n7pc/5TqarjDa1U0Tz0yH92B
-FODEPM2dMPgwqZfT7syj0B9fHBOB1BirlNFjw55/NZKeX0Tq7PQiXLfoPX2k+Ymp
-kbIq2eszh+6l/ePazIjmiSZuxyuC0F6dWdsU7JGDBcNeDsYq0ATdcT0gTlgn/FP7
-eHgZFLL8kFKJOGJgB7Sg7KxrUNb9uShr71ItOrL/8QFArDcCAwEAAaOCAh4wggIa
-MA8GA1UdEwEB/wQFMAMBAf8wggG1BgNVHSAEggGsMIIBqDCCAaQGDysGAQQBsT4A
-AAEJKIORMTCCAY8wggFIBggrBgEFBQcCAjCCAToaggE2UmVsaWFuY2Ugb24gb3Ig
-dXNlIG9mIHRoaXMgQ2VydGlmaWNhdGUgY3JlYXRlcyBhbiBhY2tub3dsZWRnbWVu
-dCBhbmQgYWNjZXB0YW5jZSBvZiB0aGUgdGhlbiBhcHBsaWNhYmxlIHN0YW5kYXJk
-IHRlcm1zIGFuZCBjb25kaXRpb25zIG9mIHVzZSwgdGhlIENlcnRpZmljYXRpb24g
-UHJhY3RpY2UgU3RhdGVtZW50IGFuZCB0aGUgUmVseWluZyBQYXJ0eSBBZ3JlZW1l
-bnQsIHdoaWNoIGNhbiBiZSBmb3VuZCBhdCB0aGUgYmVUUlVTVGVkIHdlYiBzaXRl
-LCBodHRwOi8vd3d3LmJldHJ1c3RlZC5jb20vcHJvZHVjdHNfc2VydmljZXMvaW5k
-ZXguaHRtbDBBBggrBgEFBQcCARY1aHR0cDovL3d3dy5iZXRydXN0ZWQuY29tL3By
-b2R1Y3RzX3NlcnZpY2VzL2luZGV4Lmh0bWwwHQYDVR0OBBYEFEU9w6nR3D8kVpgc
-cxiIav+DR+22MB8GA1UdIwQYMBaAFEU9w6nR3D8kVpgccxiIav+DR+22MA4GA1Ud
-DwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOCAQEASZK8o+6svfoNyYt5hhwjdrCA
-WXf82n+0S9/DZEtqTg6t8n1ZdwWtColzsPq8y9yNAIiPpqCy6qxSJ7+hSHyXEHu6
-7RMdmgduyzFiEuhjA6p9beP4G3YheBufS0OM00mG9htc9i5gFdPp43t1P9ACg9AY
-gkHNZTfqjjJ+vWuZXTARyNtIVBw74acT02pIk/c9jH8F6M7ziCpjBLjqflh8AXtb
-4cV97yHgjQ5dUX2xZ/2jvTg2xvI4hocalmhgRvsoFEdV4aeADGvi6t9NfJBIoDa9
-CReJf8Py05yc493EG931t3GzUwWJBtDLSoDByFOQtTwxiBdQn8nEDovYqAJjDQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFLDCCBBSgAwIBAgIEOU99hzANBgkqhkiG9w0BAQUFADBaMQswCQYDVQQGEwJX
-VzESMBAGA1UEChMJYmVUUlVTVGVkMRswGQYDVQQDExJiZVRSVVNUZWQgUm9vdCBD
-QXMxGjAYBgNVBAMTEWJlVFJVU1RlZCBSb290IENBMB4XDTAwMDYyMDE0MjEwNFoX
-DTEwMDYyMDEzMjEwNFowWjELMAkGA1UEBhMCV1cxEjAQBgNVBAoTCWJlVFJVU1Rl
-ZDEbMBkGA1UEAxMSYmVUUlVTVGVkIFJvb3QgQ0FzMRowGAYDVQQDExFiZVRSVVNU
-ZWQgUm9vdCBDQTCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANS0c3oT
-CjhVAb6JVuGUntS+WutKNHUbYSnE4a0IYCF4SP+00PpeQY1hRIfo7clY+vyTmt9P
-6j41ffgzeubx181vSUs9Ty1uDoM6GHh3o8/n9E1z2Jo7Gh2+lVPPIJfCzz4kUmwM
-jmVZxXH/YgmPqsWPzGCgc0rXOD8Vcr+il7dw6K/ifhYGTPWqZCZyByWtNfwYsSbX
-2P8ZDoMbjNx4RWc0PfSvHI3kbWvtILNnmrRhyxdviTX/507AMhLn7uzf/5cwdO2N
-R47rtMNE5qdMf1ZD6Li8tr76g5fmu/vEtpO+GRg+jIG5c4gW9JZDnGdzF5DYCW5j
-rEq2I8QBoa2k5MUCAwEAAaOCAfgwggH0MA8GA1UdEwEB/wQFMAMBAf8wggFZBgNV
-HSAEggFQMIIBTDCCAUgGCisGAQQBsT4BAAAwggE4MIIBAQYIKwYBBQUHAgIwgfQa
-gfFSZWxpYW5jZSBvbiB0aGlzIGNlcnRpZmljYXRlIGJ5IGFueSBwYXJ0eSBhc3N1
-bWVzIGFjY2VwdGFuY2Ugb2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0
-ZXJtcyBhbmQgY29uZGl0aW9ucyBvZiB1c2UsIGFuZCBjZXJ0aWZpY2F0aW9uIHBy
-YWN0aWNlIHN0YXRlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IGJlVFJVU1Rl
-ZCdzIHdlYiBzaXRlLCBodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0L3Rl
-cm1zMDEGCCsGAQUFBwIBFiVodHRwczovL3d3dy5iZVRSVVNUZWQuY29tL3ZhdWx0
-L3Rlcm1zMDQGA1UdHwQtMCswKaAnoCWkIzAhMRIwEAYDVQQKEwliZVRSVVNUZWQx
-CzAJBgNVBAYTAldXMB0GA1UdDgQWBBQquZtpLjub2M3eKjEENGvKBxirZzAfBgNV
-HSMEGDAWgBQquZtpLjub2M3eKjEENGvKBxirZzAOBgNVHQ8BAf8EBAMCAf4wDQYJ
-KoZIhvcNAQEFBQADggEBAHlh26Nebhax6nZR+csVm8tpvuaBa58oH2U+3RGFktTo
-Qb9+M70j5/Egv6S0phkBxoyNNXxlpE8JpNbYIxUFE6dDea/bow6be3ga8wSGWsb2
-jCBHOElQBp1yZzrwmAOtlmdE/D8QDYZN5AA7KXvOOzuZhmElQITcE2K3+spZ1gMe
-1lMBzW1MaFVA4e5rxyoAAEiCswoBw2AqDPeCNe5IhpbkdNQ96gFxugR1QKepfzk5
-mlWXKWWuGVUlBXJH0+gY3Ljpr0NzARJ0o+FcXxVdJPP55PS2Z2cS52QiivalQaYc
-tmBjRYoQtLpGEK5BV2VsPyMQPyEQWbfkQN0mDCP2qq4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIGUTCCBTmgAwIBAgIEPLVPQDANBgkqhkiG9w0BAQUFADBmMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEzMDEGA1UEAxMq
-YmVUUlVTVGVkIFJvb3QgQ0EgLSBFbnRydXN0IEltcGxlbWVudGF0aW9uMB4XDTAy
-MDQxMTA4MjQyN1oXDTIyMDQxMTA4NTQyN1owZjESMBAGA1UEChMJYmVUUlVTVGVk
-MRswGQYDVQQLExJiZVRSVVNUZWQgUm9vdCBDQXMxMzAxBgNVBAMTKmJlVFJVU1Rl
-ZCBSb290IENBIC0gRW50cnVzdCBJbXBsZW1lbnRhdGlvbjCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALr0RAOqEmq1Q+xVkrYwfTVXDNvzDSduTPdQqJtO
-K2/b9a0cS12zqcH+e0TrW6MFDR/FNCswACnxeECypP869AGIF37m1CbTukzqMvtD
-d5eHI8XbQ6P1KqNRXuE70mVpflUVm3rnafdE4Fe1FehmYA8NA/uCjqPoEXtsvsdj
-DheT389Lrm5zdeDzqrmkwAkbhepxKYhBMvnwKg5sCfJ0a2ZsUhMfGLzUPvfYbiCe
-yv78IZTuEyhL11xeDGbu6bsPwTSxfwh28z0mcMmLJR1iJAzqHHVOwBLkuhMdMCkt
-VjMFu5dZfsZJT4nXLySotohAtWSSU1Yk5KKghbNekLQSM80CAwEAAaOCAwUwggMB
-MIIBtwYDVR0gBIIBrjCCAaowggGmBg8rBgEEAbE+AAACCSiDkTEwggGRMIIBSQYI
-KwYBBQUHAgIwggE7GoIBN1JlbGlhbmNlIG9uIG9yIHVzZSBvZiB0aGlzIENlcnRp
-ZmljYXRlIGNyZWF0ZXMgYW4gYWNrbm93bGVkZ21lbnQgYW5kIGFjY2VwdGFuY2Ug
-b2YgdGhlIHRoZW4gYXBwbGljYWJsZSBzdGFuZGFyZCB0ZXJtcyBhbmQgY29uZGl0
-aW9ucyBvZiB1c2UsIHRoZSBDZXJ0aWZpY2F0aW9uIFByYWN0aWNlIFN0YXRlbWVu
-dCBhbmQgdGhlIFJlbHlpbmcgUGFydHkgQWdyZWVtZW50LCB3aGljaCBjYW4gYmUg
-Zm91bmQgYXQgdGhlIGJlVFJVU1RlZCB3ZWIgc2l0ZSwgaHR0cHM6Ly93d3cuYmV0
-cnVzdGVkLmNvbS9wcm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMEIGCCsGAQUF
-BwIBFjZodHRwczovL3d3dy5iZXRydXN0ZWQuY29tL3Byb2R1Y3RzX3NlcnZpY2Vz
-L2luZGV4Lmh0bWwwEQYJYIZIAYb4QgEBBAQDAgAHMIGJBgNVHR8EgYEwfzB9oHug
-eaR3MHUxEjAQBgNVBAoTCWJlVFJVU1RlZDEbMBkGA1UECxMSYmVUUlVTVGVkIFJv
-b3QgQ0FzMTMwMQYDVQQDEypiZVRSVVNUZWQgUm9vdCBDQSAtIEVudHJ1c3QgSW1w
-bGVtZW50YXRpb24xDTALBgNVBAMTBENSTDEwKwYDVR0QBCQwIoAPMjAwMjA0MTEw
-ODI0MjdagQ8yMDIyMDQxMTA4NTQyN1owCwYDVR0PBAQDAgEGMB8GA1UdIwQYMBaA
-FH1w5a44iwY/qhwaj/nPJDCqhIQWMB0GA1UdDgQWBBR9cOWuOIsGP6ocGo/5zyQw
-qoSEFjAMBgNVHRMEBTADAQH/MB0GCSqGSIb2fQdBAAQQMA4bCFY2LjA6NC4wAwIE
-kDANBgkqhkiG9w0BAQUFAAOCAQEAKrgXzh8QlOu4mre5X+za95IkrNySO8cgjfKZ
-5V04ocI07cUTWVwFtStPYZuR+0H8/NU8TZh2BvWBfevdkObRVlTa4y0MnxEylCIB
-evZsLHRnBMylj44ss0O1lKLQfelifwa+JwGDnjr9iu6YQ0pr17WXOzq/T220Y/oz
-ADQuLW2WyXvKmWO6vvT2MKAtmJbpVkQFqUSjYRDrgqFnXbxdJ3Wqiig2KjiS2d2k
-XgClzMx8KSreKJCrt+G2/30lC0DYqjSjLd4H61/OCt3Kfjp9JsFiaDrmLzfzgYYh
-xKlkqu9FNtEaZnz46TfW1mG+oq1I59/mdP7TbX3SJdysYlep9w==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFaDCCBFCgAwIBAgIQO1nHe81bV569N1KsdrSqGjANBgkqhkiG9w0BAQUFADBi
-MRIwEAYDVQQKEwliZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENB
-czEvMC0GA1UEAxMmYmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRp
-b24wHhcNMDIwNDExMTExODEzWhcNMjIwNDEyMTEwNzI1WjBiMRIwEAYDVQQKEwli
-ZVRSVVNUZWQxGzAZBgNVBAsTEmJlVFJVU1RlZCBSb290IENBczEvMC0GA1UEAxMm
-YmVUUlVTVGVkIFJvb3QgQ0EgLSBSU0EgSW1wbGVtZW50YXRpb24wggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQDkujQwCY5X0LkGLG9uJIAiv11DpvpPrILn
-HGhwhRujbrWqeNluB0s/6d/16uhUoWGKDi9pdRi3DOUUjXFumLhV/AyV0Jtu4S2I
-1DpAa5LxmZZk3tv/ePTulh1HiXzUvrmIdyM6CeYEnm2qXtLIvZpOGd+J6lsOfsPk
-tPDgaTuID0GQ+NRxQyTBjyZLO1bp/4xsN+lFrYWMU8NghpBKlsmzVLC7F/AcRdnU
-GxlkVgoZ98zh/4avflherHqQH8koOUV7orbHnB/ahdQhhlkwk75TMzf270HPM8er
-cmsl9fNTGwxMLvF1S++gh/f+ihXQbNXL+WhTuXAVE8L1LvtDNXUtAgMBAAGjggIY
-MIICFDAMBgNVHRMEBTADAQH/MIIBtQYDVR0gBIIBrDCCAagwggGkBg8rBgEEAbE+
-AAADCSiDkTEwggGPMEEGCCsGAQUFBwIBFjVodHRwOi8vd3d3LmJldHJ1c3RlZC5j
-b20vcHJvZHVjdHNfc2VydmljZXMvaW5kZXguaHRtbDCCAUgGCCsGAQUFBwICMIIB
-OhqCATZSZWxpYW5jZSBvbiBvciB1c2Ugb2YgdGhpcyBDZXJ0aWZpY2F0ZSBjcmVh
-dGVzIGFuIGFja25vd2xlZGdtZW50IGFuZCBhY2NlcHRhbmNlIG9mIHRoZSB0aGVu
-IGFwcGxpY2FibGUgc3RhbmRhcmQgdGVybXMgYW5kIGNvbmRpdGlvbnMgb2YgdXNl
-LCB0aGUgQ2VydGlmaWNhdGlvbiBQcmFjdGljZSBTdGF0ZW1lbnQgYW5kIHRoZSBS
-ZWx5aW5nIFBhcnR5IEFncmVlbWVudCwgd2hpY2ggY2FuIGJlIGZvdW5kIGF0IHRo
-ZSBiZVRSVVNUZWQgd2ViIHNpdGUsIGh0dHA6Ly93d3cuYmV0cnVzdGVkLmNvbS9w
-cm9kdWN0c19zZXJ2aWNlcy9pbmRleC5odG1sMAsGA1UdDwQEAwIBBjAfBgNVHSME
-GDAWgBSp7BR++dlDzFMrFK3P9/BZiUHNGTAdBgNVHQ4EFgQUqewUfvnZQ8xTKxSt
-z/fwWYlBzRkwDQYJKoZIhvcNAQEFBQADggEBANuXsHXqDMTBmMpWBcCorSZIry0g
-6IHHtt9DwSwddUvUQo3neqh03GZCWYez9Wlt2ames30cMcH1VOJZJEnl7r05pmuK
-mET7m9cqg5c0Lcd9NUwtNLg+DcTsiCevnpL9UGGCqGAHFFPMZRPB9kdEadIxyKbd
-LrML3kqNWz2rDcI1UqJWN8wyiyiFQpyRQHpwKzg21eFzGh/l+n5f3NacOzDq28Bb
-J1zTcwfBwvNMm2+fG8oeqqg4MwlYsq78B+g23FW6L09A/nq9BqaBwZMifIYRCgZ3
-SK41ty8ymmFei74pnykkiFY5LKjSq5YDWtRIn7lAhAuYaPsBQ9Yb4gmxlxw=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEIDCCAwigAwIBAgIQNE7VVyDV7exJ9C/ON9srbTANBgkqhkiG9w0BAQUFADCB
-qTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5jLjEoMCYGA1UECxMf
-Q2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYGA1UECxMvKGMpIDIw
-MDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNlIG9ubHkxHzAdBgNV
-BAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwHhcNMDYxMTE3MDAwMDAwWhcNMzYw
-NzE2MjM1OTU5WjCBqTELMAkGA1UEBhMCVVMxFTATBgNVBAoTDHRoYXd0ZSwgSW5j
-LjEoMCYGA1UECxMfQ2VydGlmaWNhdGlvbiBTZXJ2aWNlcyBEaXZpc2lvbjE4MDYG
-A1UECxMvKGMpIDIwMDYgdGhhd3RlLCBJbmMuIC0gRm9yIGF1dGhvcml6ZWQgdXNl
-IG9ubHkxHzAdBgNVBAMTFnRoYXd0ZSBQcmltYXJ5IFJvb3QgQ0EwggEiMA0GCSqG
-SIb3DQEBAQUAA4IBDwAwggEKAoIBAQCsoPD7gFnUnMekz52hWXMJEEUMDSxuaPFs
-W0hoSVk3/AszGcJ3f8wQLZU0HObrTQmnHNK4yZc2AreJ1CRfBsDMRJSUjQJib+ta
-3RGNKJpchJAQeg29dGYvajig4tVUROsdB58Hum/u6f1OCyn1PoSgAfGcq/gcfomk
-6KHYcWUNo1F77rzSImANuVud37r8UVsLr5iy6S7pBOhih94ryNdOwUxkHt3Ph1i6
-Sk/KaAcdHJ1KxtUvkcx8cXIcxcBn6zL9yZJclNqFwJu/U30rCfSMnZEfl2pSy94J
-NqR32HuHUETVPm4pafs5SSYeCaWAe0At6+gnhcn+Yf1+5nyXHdWdAgMBAAGjQjBA
-MA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMB0GA1UdDgQWBBR7W0XP
-r87Lev0xkhpqtvNG61dIUDANBgkqhkiG9w0BAQUFAAOCAQEAeRHAS7ORtvzw6WfU
-DW5FvlXok9LOAz/t2iWwHVfLHjp2oEzsUHboZHIMpKnxuIvW1oeEuzLlQRHAd9mz
-YJ3rG9XRbkREqaYB7FViHXe4XI5ISXycO1cRrK1zN44veFyQaEfZYGDm/Ac9IiAX
-xPcW6cTYcvnIc3zfFi8VqT79aie2oetaupgf1eNNZAqdE8hhuvU5HIe6uL17In/2
-/qxAeeWsEG89jxt5dovEN7MhGITlNgDrYyCZuen+MwS7QcjBAvlEYyCegc5C09Y/
-LHbTY5xZ3Y+m4Q6gLkH3LpVHz7z9M/P2C2F+fpErgUfCJzDupxBdN49cOSvkBPB7
-jVaMaA==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIETzCCAzegAwIBAgIEO63vKTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDEwOTIzMTQxODE3WhcNMTEw
-OTIzMTMxODE3WjB1MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWdu
-ZXQgLSBDQSBLbGFzYSAxMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC4SRW9Q58g5DY1Hw7h
-gCRKBEdPdGn0MFHsfw7rlu/oQm7IChI/uWd9q5wwo77YojtTDjRnpgZsjqBeynX8T90vFILqsY2K
-5CF1OESalwvVr3sZiQX79lisuFKat92u6hBFikFIVxfHHB67Af+g7u0dEHdDW7lwy81MwFYxBTRy
-9wIDAQABo4IBbTCCAWkwDwYDVR0TAQH/BAUwAwEB/zAOBgNVHQ8BAf8EBAMCAQYwggEEBgNVHSAE
-gfwwgfkwgfYGDSsGAQQBvj8CAQoBAQAwgeQwgZoGCCsGAQUFBwICMIGNGoGKQ2VydHlmaWthdCB3
-eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVudGVtOiAiUG9saXR5a2EgQ2VydHlmaWthY2ppIGRs
-YSBSb290Q0EiLiBDZXJ0eWZpa2F0IHd5c3Rhd2lvbnkgcHJ6ZXogUm9vdENBIHcgaGllcmFyY2hp
-aSBDQyBTaWduZXQuMEUGCCsGAQUFBwIBFjlodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0b3Jp
-dW0vZG9rdW1lbnR5L3BjX3Jvb3RjYS50eHQwHwYDVR0jBBgwFoAUwJvFIw0C4aZOSGsfAOnjmhQb
-sa8wHQYDVR0OBBYEFMODHtVZd1T7TftXR/nEI1zR54njMA0GCSqGSIb3DQEBBQUAA4IBAQBRIHQB
-FIGh8Jpxt87AgSLwIEEk4+oGy769u3NtoaR0R3WNMdmt7fXTi0tyTQ9V4AIszxVjhnUPaKnF1KYy
-f8Tl+YTzk9ZfFkZ3kCdSaILZAOIrmqWNLPmjUQ5/JiMGho0e1YmWUcMci84+pIisTsytFzVP32/W
-+sz2H4FQAvOIMmxB7EJX9AdbnXn9EXZ+4nCqi0ft5z96ZqOJJiCB3vSaoYg+wdkcvb6souMJzuc2
-uptXtR1Xf3ihlHaGW+hmnpcwFA6AoNrom6Vgzk6U1ienx0Cw28BhRSKqzKkyXkuK8gRflZUx84uf
-tXncwKJrMiE3lvgOOBITRzcahirLer4c
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE9zCCA9+gAwIBAgIEPL/xoTANBgkqhkiG9w0BAQUFADB2MQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MSAwHgYDVQQDExdDQyBTaWduZXQgLSBQQ0EgS2xhc2EgMjAeFw0wMjA0MTkxMDI5NTNa
-Fw0xNzA0MTgxMjUzMDdaMHUxCzAJBgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4g
-eiBvLm8uMSQwIgYDVQQLExtDZW50cnVtIENlcnR5ZmlrYWNqaSBTaWduZXQxHzAdBgNVBAMTFkND
-IFNpZ25ldCAtIENBIEtsYXNhIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCqgLJu
-QqY4yavbSgHg8CyfKTx4BokNSDOVz4eD9vptUr11Kqd06ED1hlH7Sg0goBFAfntNU/QTKwSBaNui
-me7C4sSEdgsKrPoAhGb4Mq8y7Ty7RqZz7mkzNMqzL2L2U4yQ2QjvpH8MH0IBqOWEcpSkpwnrCDIm
-RoTfd+YlZWKi2JceQixUUYIQ45Ox8+x8hHbvvZdgqtcvo8PW27qoHkp/7hMuJ44kDAGrmxffBXl/
-OBRZp0uO1CSLcMcVJzyr2phKhy406MYdWrtNPEluGs0GFDzd0nrIctiWAO4cmct4S72S9Q6e//0G
-O9f3/Ca5Kb2I1xYLj/xE+HgjHX9aD2MhAgMBAAGjggGMMIIBiDAPBgNVHRMBAf8EBTADAQH/MA4G
-A1UdDwEB/wQEAwIBBjCB4wYDVR0gBIHbMIHYMIHVBg0rBgEEAb4/AhQKAQEAMIHDMHUGCCsGAQUF
-BwICMGkaZ0NlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBQQ0EyIC0gQ2VydHlmaWthdHkgVXJ6ZWRvdyBLbGFzeSAyIi4wSgYI
-KwYBBQUHAgEWPmh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9kb2t1bWVudHkva2xh
-c2EyL3BjX3BjYTIudHh0MD8GA1UdHwQ4MDYwNKAyoDCGLmh0dHA6Ly93d3cuc2lnbmV0LnBsL3Jl
-cG96eXRvcml1bS9jcmwvcGNhMi5jcmwwHwYDVR0jBBgwFoAUwGxGyl2CfpYHRonE82AVXO08kMIw
-HQYDVR0OBBYEFLtFBlILy4HNKVSzvHxBTM0HDowlMA0GCSqGSIb3DQEBBQUAA4IBAQBWTsCbqXrX
-hBBev5v5cIuc6gJM8ww7oR0uMQRZoFSqvQUPWBYM2/TLI/f8UM9hSShUVj3zEsSj/vFHagUVmzuV
-Xo5u0WK8iaqATSyEVBhADHrPG6wYcLKJlagge/ILA0m+SieyP2sjYD9MUB9KZIEyBKv0429UuDTw
-6P7pslxMWJBSNyQxaLIs0SRKsqZZWkc7ZYAj2apSkBMX2Is1oHA+PwkF6jQMwCao/+CndXPUzfCF
-6caa9WwW31W26MlXCvSmJgfiTPwGvm4PkPmOnmWZ3CczzhHl4q7ztHFzshJH3sZWDnrWwBFjzz5e
-Pr3WHV1wA7EY6oT4zBx+2gT9XBTB
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEUzCCAzugAwIBAgIEPq+qjzANBgkqhkiG9w0BAQUFADBhMQswCQYDVQQGEwJQTDE3MDUGA1UE
-ChMuQ1ppQyBDZW50cmFzdCBTQSB3IGltaWVuaXUgTWluaXN0cmEgR29zcG9kYXJraTEZMBcGA1UE
-AxMQQ1ppQyBDZW50cmFzdCBTQTAeFw0wMzA0MzAxMDUwNTVaFw0wODA0MjgxMDUwNTVaMGgxCzAJ
-BgNVBAYTAlBMMR8wHQYDVQQKExZUUCBJbnRlcm5ldCBTcC4geiBvLm8uMR8wHQYDVQQDExZDQyBT
-aWduZXQgLSBDQSBLbGFzYSAzMRcwFQYDVQQFEw5OdW1lciB3cGlzdTogNDCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBALVdeOM62cPH2NERFxbS5FIp/HSv3fgesdVsTUFxZbGtE+/E0RMl
-KZQJHH9emx7vRYubsi4EOLCjYsCOTFvgGRIpZzx7R7T5c0Di5XFkRU4gjBl7aHJoKb5SLzGlWdoX
-GsekVtl6keEACrizV2EafqjI8cnBWY7OxQ1ooLQp5AeFjXg+5PT0lO6TUZAubqjFbhVbxSWjqvdj
-93RGfyYE76MnNn4c2xWySD07n7uno06TC0IJe6+3WSX1h+76VsIFouWBXOoM7cxxiLjoqdBVu24+
-P8e81SukE7qEvOwDPmk9ZJFtt1nBNg8a1kaixcljrA/43XwOPz6qnJ+cIj/xywECAwEAAaOCAQow
-ggEGMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0PAQH/BAQDAgEGMDMGA1UdIAEB/wQpMCcwJQYEVR0g
-ADAdMBsGCCsGAQUFBwIBFg93d3cuY2VudHJhc3QucGwwgY4GA1UdIwSBhjCBg4AU2a7r85Cp1iJN
-W0Ca1LR6VG3996ShZaRjMGExCzAJBgNVBAYTAlBMMTcwNQYDVQQKEy5DWmlDIENlbnRyYXN0IFNB
-IHcgaW1pZW5pdSBNaW5pc3RyYSBHb3Nwb2RhcmtpMRkwFwYDVQQDExBDWmlDIENlbnRyYXN0IFNB
-ggQ9/0sQMB0GA1UdDgQWBBR7Y8wZkHq0zrY7nn1tFSdQ0PlJuTANBgkqhkiG9w0BAQUFAAOCAQEA
-ldt/svO5c1MU08FKgrOXCGEbEPbQxhpM0xcd6Iv3dCo6qugEgjEs9Qm5CwUNKMnFsvR27cJWUvZb
-MVcvwlwCwclOdwF6u/QRS8bC2HYErhYo9bp9yuxxzuow2A94c5fPqfVrjXy+vDouchAm6+A5Wjzv
-J8wxVFDCs+9iGACmyUWr/JGXCYiQIbQkwlkRKHHlan9ymKf1NvIej/3EpeT8fKr6ywxGuhAfqofW
-pg3WJY/RCB4lTzD8vZGNwfMFGkWhJkypad3i9w3lGmDVpsHaWtCgGfd0H7tUtWPkP+t7EjIRCD9J
-HYnTR+wbbewc5vOI+UobR15ynGfFIaSIiMTVtQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEejCCA2KgAwIBAgIEP4vk6TANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2Vu
-dHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBD
-QSBLbGFzYSAyMB4XDTAzMTAxNDExNTgyMloXDTE3MDQxODEyNTMwN1owdzELMAkG
-A1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6IG8uby4xJDAiBgNV
-BAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEhMB8GA1UEAxMYQ0MgU2ln
-bmV0IC0gT0NTUCBLbGFzYSAyMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCo
-VCsaBStblXQYVNthe3dvaCrfvKpPXngh4almm988iIlEv9CVTaAdCfaJNihvA+Vs
-Qw8++ix1VqteMQE474/MV/YaXigP0Zr0QB+g+/7PWVlv+5U9Gzp9+Xx4DJay8AoI
-iB7Iy5Qf9iZiHm5BiPRIuUXT4ZRbZRYPh0/76vgRsQIDAQABo4IBkjCCAY4wDgYD
-VR0PAQH/BAQDAgeAMBMGA1UdJQQMMAoGCCsGAQUFBwMJMEEGA1UdHwQ6MDgwNqA0
-oDKGMGh0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9jcmwva2xhc2Ey
-LmNybDCB2AYDVR0gBIHQMIHNMIHKBg4rBgEEAb4/AoFICgwBADCBtzBsBggrBgEF
-BQcCAjBgGl5DZXJ0eWZpa2F0IHd5ZGFueSB6Z29kbmllIHogZG9rdW1lbnRlbSAi
-UG9saXR5a2EgQ2VydHlmaWthY2ppIC0gQ2VydHlmaWthdHkgcmVzcG9uZGVyb3cg
-T0NTUCIuMEcGCCsGAQUFBwIBFjtodHRwOi8vd3d3LnNpZ25ldC5wbC9yZXBvenl0
-b3JpdW0vZG9rdW1lbnR5L3BjX29jc3BfMV8wLnBkZjAfBgNVHSMEGDAWgBS7RQZS
-C8uBzSlUs7x8QUzNBw6MJTAdBgNVHQ4EFgQUKEVrOY7cEHvsVgvoyZdytlbtgwEw
-CQYDVR0TBAIwADANBgkqhkiG9w0BAQUFAAOCAQEAQrRg5MV6dxr0HU2IsLInxhvt
-iUVmSFkIUsBCjzLoewOXA16d2oDyHhI/eE+VgAsp+2ANjZu4xRteHIHoYMsN218M
-eD2MLRsYS0U9xxAFK9gDj/KscPbrrdoqLvtPSMhUb4adJS9HLhvUe6BicvBf3A71
-iCNe431axGNDWKnpuj2KUpj4CFHYsWCXky847YtTXDjri9NIwJJauazsrSjK+oXp
-ngRS506mdQ7vWrtApkh8zhhWp7duCkjcCo1O8JxqYr2qEW1fXmgOISe010v2mmuv
-hHxPyVwoAU4KkOw0nbXZn53yak0is5+XmAjh0wWue44AssHrjC9nUh3mkLt6eQ==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEezCCA2OgAwIBAgIEP4vnLzANBgkqhkiG9w0BAQUFADBoMQswCQYDVQQGEwJQ
-TDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEfMB0GA1UEAxMWQ0Mg
-U2lnbmV0IC0gQ0EgS2xhc2EgMzEXMBUGA1UEBRMOTnVtZXIgd3Bpc3U6IDQwHhcN
-MDMxMDE0MTIwODAwWhcNMDgwNDI4MTA1MDU1WjB3MQswCQYDVQQGEwJQTDEfMB0G
-A1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBD
-ZXJ0eWZpa2FjamkgU2lnbmV0MSEwHwYDVQQDExhDQyBTaWduZXQgLSBPQ1NQIEts
-YXNhIDMwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAM/9GwvARNuCVN+PqZmO
-4FqH8vTqhenUyqRkmAVT4YhLu0a9AXeLAYVDu+NTkYzsAUMAfu55rIKHNLlm6WbF
-KvLiKKz4p4pbUr+ToPcwl/TDotidloUdBAxDg0SL+PmQqACZDe3seJho2IYf2vDL
-/G4TLMbKmNB0mlWFuN0f4fJNAgMBAAGjggGgMIIBnDAOBgNVHQ8BAf8EBAMCB4Aw
-EwYDVR0lBAwwCgYIKwYBBQUHAwkwTwYDVR0fBEgwRjBEoEKgQIY+aHR0cDovL3d3
-dy5zaWduZXQucGwva3dhbGlmaWtvd2FuZS9yZXBvenl0b3JpdW0vY3JsL2tsYXNh
-My5jcmwwgdgGA1UdIASB0DCBzTCBygYOKwYBBAG+PwKCLAoCAQAwgbcwbAYIKwYB
-BQUHAgIwYBpeQ2VydHlmaWthdCB3eWRhbnkgemdvZG5pZSB6IGRva3VtZW50ZW0g
-IlBvbGl0eWthIENlcnR5ZmlrYWNqaSAtIENlcnR5ZmlrYXR5IHJlc3BvbmRlcm93
-IE9DU1AiLjBHBggrBgEFBQcCARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5
-dG9yaXVtL2Rva3VtZW50eS9wY19vY3NwXzFfMC5wZGYwHwYDVR0jBBgwFoAUe2PM
-GZB6tM62O559bRUnUND5SbkwHQYDVR0OBBYEFG4jnCMvBALRQXtmDn9TyXQ/EKP+
-MAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADggEBACXrKG5Def5lpRwmZom3UEDq
-bl7y4U3qomG4B+ok2FVZGgPZti+ZgvrenPj7PtbYCUBPsCSTNrznKinoT3gD9lQQ
-xkEHwdc6VD1GlFp+qI64u0+wS9Epatrdf7aBnizrOIB4LJd4E2TWQ6trspetjMIU
-upyWls1BmYUxB91R7QkTiAUSNZ87s3auhZuG4f0V0JLVCcg2rn7AN1rfMkgxCbHk
-GxiQbYWFljl6aatxR3odnnzVUe1I8uoY2JXpmmUcOG4dNGuQYziyKG3mtXCQWvug
-5qi9Mf3KUh1oSTKx6HfLjjNl1+wMB5Mdb8LF0XyZLdJM9yIZh7SBRsYm9QiXevY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPL7eEDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDIwNDE4MTQ1NDA4WhcNMjYw
-OTIxMTU0MjE5WjB2MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWdu
-ZXQgLSBQQ0EgS2xhc2EgMjCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAM7BrBlbN5ma
-M5eg0BOTqoZ+9NBDvU8Lm5rTdrMswFTCathzpVVLK/JD4K3+4oCZ9SRAspEXE4gvwb08ASY6w5s+
-HpRkeJw8YzMFR5kDZD5adgnCAy4vDfIXYZgppXPaTQ8wnfUZ7BZ7Zfa7QBemUIcJIzJBB0UqgtxW
-Ceol9IekpBRVmuuSA6QG0Jkm+pGDJ05yj2eQG8jTcBENM7sVA8rGRMyFA4skSZ+D0OG6FS2xC1i9
-JyN0ag1yII/LPx8HK5J4W9MaPRNjAEeaa2qI9EpchwrOxnyVbQfSedCG1VRJfAsE/9tT9CMUPZ3x
-W20QjQcSZJqVcmGW9gVsXKQOVLsCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
-AQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQEBMIHkMIGaBggrBgEFBQcC
-AjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6
-IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5z
-aWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Evcm9vdGNhLmNy
-bDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNVHQ4EFgQUwGxGyl2CfpYHRonE
-82AVXO08kMIwDQYJKoZIhvcNAQEFBQADggEBABp1TAUsa+BeVWg4cjowc8yTJ5XN3GvN96GObMkx
-UGY7U9kVrLI71xBgoNVyzXTiMNDBvjh7vdPWjpl5SDiRpnnKiOFXA43HvNWzUaOkTu1mxjJsZsan
-ot1Xt6j0ZDC+03FjLHdYMyM9kSWp6afb4980EPYZCcSzgM5TOGfJmNii5Tq468VFKrX+52Aou1G2
-2Ohu+EEOlOrG7ylKv1hHUJJCjwN0ZVEIn1nDbrU9FeGCz8J9ihVUvnENEBbBkU37PWqWuHitKQDV
-tcwTwJJdR8cmKq3NmkwAm9fPacidQLpaw0WkuGrS+fEDhu1Nhy9xELP6NA9GRTCNxm/dXlcwnmY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIFGjCCBAKgAwIBAgIEPV0tNDANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDIwODE2MTY0OTU2WhcNMjYw
-OTIxMTU0MjE5WjB2MQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MSAwHgYDVQQDExdDQyBTaWdu
-ZXQgLSBQQ0EgS2xhc2EgMzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALN3LanJtdue
-Ne6geWUTFENa+lEuzqELcoqhYB+a/tJcPEkc6TX/bYPzalRRjqs+quMP6KZTU0DixOrV+K7iWaqA
-iQ913HX5IBLmKDCrTVW/ZvSDpiBKbxlHfSNuJxAuVT6HdbzK7yAW38ssX+yS2tZYHZ5FhZcfqzPE
-OpO94mAKcBUhk6T/ki0evXX/ZvvktwmF3hKattzwtM4JMLurAEl8SInyEYULw5JdlfcBez2Tg6Db
-w34hA1A+ckTwhxzecrB8TUe2BnQKOs9vr2cCACpFFcOmPkM0Drtjctr1QHm1tYSqRFRf9VcV5tfC
-3P8QqoK4ONjtLPHc9x5NE1uK/FMCAwEAAaOCAbMwggGvMA8GA1UdEwEB/wQFMAMBAf8wDgYDVR0P
-AQH/BAQDAgEGMIIBBAYDVR0gBIH8MIH5MIH2Bg0rBgEEAb4/AgEKAQECMIHkMIGaBggrBgEFBQcC
-AjCBjRqBikNlcnR5ZmlrYXQgd3lzdGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0
-eWthIENlcnR5ZmlrYWNqaSBkbGEgUm9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6
-IFJvb3RDQSB3IGhpZXJhcmNoaWkgQ0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5z
-aWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY19yb290Y2EudHh0MEQGA1UdHwQ9MDsw
-OaA3oDWGM2h0dHA6Ly93d3cuc2lnbmV0LnBsL3JlcG96eXRvcml1bS9yb290Y2Evcm9vdGNhLmNy
-bDAfBgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAdBgNVHQ4EFgQUXvthcPHlH5BgGhlM
-ErJNXWlhlgAwDQYJKoZIhvcNAQEFBQADggEBACIce95Mvn710KCAISA0CuHD4aznTU6pLoCDShW4
-7OR+GTpJUm1coTcUqlBHV9mra4VFrBcBuOkHZoBLq/jmE0QJWnpSEULDcH9J3mF0nqO9SM+mWyJG
-dsJF/XU/7smummgjMNQXwzQTtWORF+6v5KUbWX85anO2wR+M6YTBWC55zWpWi4RG3vkHFs5Ze2oF
-JTlpuxw9ZgxTnWlwI9QR2MvEhYIUMKMOWxw1nt0kKj+5TCNQQGh/VJJ1dsiroGh/io1DOcePEhKz
-1Ag52y6Wf0nJJB9yk0sFakqZH18F7eQecQImgZyyeRtsG95leNugB3BXWCW+KxwiBrtQTXv4dTE=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEzzCCA7egAwIBAgIEO6ocGTANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MRswGQYDVQQDExJDQyBTaWduZXQgLSBSb290Q0EwHhcNMDEwOTIwMTY0MjE5WhcNMjYw
-OTIxMTU0MjE5WjBxMQswCQYDVQQGEwJQTDEfMB0GA1UEChMWVFAgSW50ZXJuZXQgU3AuIHogby5v
-LjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2FjamkgU2lnbmV0MRswGQYDVQQDExJDQyBTaWdu
-ZXQgLSBSb290Q0EwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrr2vydnNpELfGW3Ks
-ARiDhJvwDtUe4AbWev+OfMc3+vA29nX8ZmIwno3gmItjo5DbUCCRiCMq5c9epcGu+kg4a3BJChVX
-REl8gVh0ST15rr3RKrSc4VgsvQzl0ZUraeQLl8JoRT5PLsUj3qwF78jUCQVckiiLVcnGfZtFCm+D
-CJXliQBDMB9XFAUEiO/DtEBs0B7wJGx7lgJeJpQUcGiaOPjcJDYOk7rNAYmmD2gWeSlepufO8luU
-YG/YDxTC4mqhRqfa4MnVO5dqy+ICj2UvUpHbZDB0KfGRibgBYeQP1kuqgIzJN4UqknVAJb0aMBSP
-l+9k2fAUdchx1njlbdcbAgMBAAGjggFtMIIBaTAPBgNVHRMBAf8EBTADAQH/MIIBBAYDVR0gBIH8
-MIH5MIH2Bg0rBgEEAb4/AgEKAQEAMIHkMIGaBggrBgEFBQcCAjCBjRqBikNlcnR5ZmlrYXQgd3lz
-dGF3aW9ueSB6Z29kbmllIHogZG9rdW1lbnRlbTogIlBvbGl0eWthIENlcnR5ZmlrYWNqaSBkbGEg
-Um9vdENBIi4gQ2VydHlmaWthdCB3eXN0YXdpb255IHByemV6IFJvb3RDQSB3IGhpZXJhcmNoaWkg
-Q0MgU2lnbmV0LjBFBggrBgEFBQcCARY5aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVt
-L2Rva3VtZW50eS9wY19yb290Y2EudHh0MB0GA1UdDgQWBBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAf
-BgNVHSMEGDAWgBTAm8UjDQLhpk5Iax8A6eOaFBuxrzAOBgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcN
-AQEFBQADggEBAGnY5QmYqnnO9OqFOWZxxb25UHRnaRF6IV9aaGit5BZufZj2Tq3v8L3SgE34GOoI
-cdRMMG5JEpEU4mN/Ef3oY6Eo+7HfqaPHI4KFmbDSPiK5s+wmf+bQSm0Yq5/h4ZOdcAESlLQeLSt1
-CQk2JoKQJ6pyAf6xJBgWEIlm4RXE4J3324PUiOp83kW6MDvaa1xY976WyInr4rwoLgxVl11LZeKW
-ha0RJJxJgw/NyWpKG7LWCm1fglF8JH51vZNndGYq1iKtfnrIOvLZq6bzaCiZm1EurD8HE6P7pmAB
-KK6o3C2OXlNfNIgwkDN/cDqk5TYsTkrpfriJPdxXBH8hQOkW89g=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIID/TCCA2agAwIBAgIEP4/gkTANBgkqhkiG9w0BAQUFADB1MQswCQYDVQQGEwJQTDEfMB0GA1UE
-ChMWVFAgSW50ZXJuZXQgU3AuIHogby5vLjEkMCIGA1UECxMbQ2VudHJ1bSBDZXJ0eWZpa2Fjamkg
-U2lnbmV0MR8wHQYDVQQDExZDQyBTaWduZXQgLSBDQSBLbGFzYSAxMB4XDTAzMTAxNzEyMjkwMloX
-DTExMDkyMzExMTgxN1owdjELMAkGA1UEBhMCUEwxHzAdBgNVBAoTFlRQIEludGVybmV0IFNwLiB6
-IG8uby4xJDAiBgNVBAsTG0NlbnRydW0gQ2VydHlmaWthY2ppIFNpZ25ldDEgMB4GA1UEAxMXQ0Mg
-U2lnbmV0IC0gVFNBIEtsYXNhIDEwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAOJYrISEtSsd
-uHajROh5/n7NGrkpYTT9NEaPe9+ucuQ37KxIbfJwXJjgUc1dw4wCkcQ12FJarD1X6mSQ4cfN/60v
-LfKI5ZD4nhJTMKlAj1pX9ScQ/MuyvKStCbn5WTkjPhjRAM0tdwXSnzuTEunfw0Oup559y3Iqxg1c
-ExflB6cfAgMBAAGjggGXMIIBkzBBBgNVHR8EOjA4MDagNKAyhjBodHRwOi8vd3d3LnNpZ25ldC5w
-bC9yZXBvenl0b3JpdW0vY3JsL2tsYXNhMS5jcmwwDgYDVR0PAQH/BAQDAgeAMBYGA1UdJQEB/wQM
-MAoGCCsGAQUFBwMIMIHaBgNVHSAEgdIwgc8wgcwGDSsGAQQBvj8CZAoRAgEwgbowbwYIKwYBBQUH
-AgIwYxphQ2VydHlmaWthdCB3eXN0YXdpb255IHpnb2RuaWUgeiBkb2t1bWVudGVtICJQb2xpdHlr
-YSBDZXJ0eWZpa2FjamkgQ0MgU2lnbmV0IC0gWm5ha293YW5pZSBjemFzZW0iLjBHBggrBgEFBQcC
-ARY7aHR0cDovL3d3dy5zaWduZXQucGwvcmVwb3p5dG9yaXVtL2Rva3VtZW50eS9wY190c2ExXzJf
-MS5wZGYwHwYDVR0jBBgwFoAUw4Me1Vl3VPtN+1dH+cQjXNHnieMwHQYDVR0OBBYEFJdDwEqtcavO
-Yd9u9tej53vWXwNBMAkGA1UdEwQCMAAwDQYJKoZIhvcNAQEFBQADgYEAnpiQkqLCJQYXUrqMHUEz
-+z3rOqS0XzSFnVVLhkVssvXc8S3FkJIiQTUrkScjI4CToCzujj3EyfNxH6yiLlMbskF8I31JxIeB
-vueqV+s+o76CZm3ycu9hb0I4lswuxoT+q5ZzPR8Irrb51rZXlolR+7KtwMg4sFDJZ8RNgOf7tbA=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIEFTCCA36gAwIBAgIBADANBgkqhkiG9w0BAQQFADCBvjELMAkGA1UEBhMCVVMx
-EDAOBgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UE
-ChMfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9z
-dG1hc3RlcjEgMB4GA1UEAxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkq
-hkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDMwMTE1MTYyOTE3
-WhcNMDcwMTE0MTYyOTE3WjCBvjELMAkGA1UEBhMCVVMxEDAOBgNVBAgTB0luZGlh
-bmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdhcmUgaW4g
-dGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEgMB4GA1UE
-AxMXQ2VydGlmaWNhdGlvbiBBdXRob3JpdHkxJTAjBgkqhkiG9w0BCQEWFmhvc3Rt
-YXN0ZXJAc3BpLWluYy5vcmcwgZ8wDQYJKoZIhvcNAQEBBQADgY0AMIGJAoGBAPB6
-rdoiLR3RodtM22LMcfwfqb5OrJNl7fwmvskgF7yP6sdD2bOfDIXhg9852jhY8/kL
-VOFe1ELAL2OyN4RAxk0rliZQVgeTgqvgkOVIBbNwgnjN6mqtuWzFiPL+NXQExq40
-I3whM+4lEiwSHaV+MYxWanMdhc+kImT50LKfkxcdAgMBAAGjggEfMIIBGzAdBgNV
-HQ4EFgQUB63oQR1/vda/G4F6P4xLiN4E0vowgesGA1UdIwSB4zCB4IAUB63oQR1/
-vda/G4F6P4xLiN4E0vqhgcSkgcEwgb4xCzAJBgNVBAYTAlVTMRAwDgYDVQQIEwdJ
-bmRpYW5hMRUwEwYDVQQHEwxJbmRpYW5hcG9saXMxKDAmBgNVBAoTH1NvZnR3YXJl
-IGluIHRoZSBQdWJsaWMgSW50ZXJlc3QxEzARBgNVBAsTCmhvc3RtYXN0ZXIxIDAe
-BgNVBAMTF0NlcnRpZmljYXRpb24gQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnggEAMAwGA1UdEwQFMAMBAf8wDQYJKoZIhvcN
-AQEEBQADgYEAm/Abn8c2y1nO3fgpAIslxvi9iNBZDhQtJ0VQZY6wgSfANyDOR4DW
-iexO/AlorB49KnkFS7TjCAoLOZhcg5FaNiKnlstMI5krQmau1Qnb/vGSNsE/UGms
-1ts+QYPUs0KmGEAFUri2XzLy+aQo9Kw74VBvqnxvaaMeY5yMcKNOieY=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIIDjCCBfagAwIBAgIJAOiOtsn4KhQoMA0GCSqGSIb3DQEBBQUAMIG8MQswCQYD
-VQQGEwJVUzEQMA4GA1UECBMHSW5kaWFuYTEVMBMGA1UEBxMMSW5kaWFuYXBvbGlz
-MSgwJgYDVQQKEx9Tb2Z0d2FyZSBpbiB0aGUgUHVibGljIEludGVyZXN0MRMwEQYD
-VQQLEwpob3N0bWFzdGVyMR4wHAYDVQQDExVDZXJ0aWZpY2F0ZSBBdXRob3JpdHkx
-JTAjBgkqhkiG9w0BCQEWFmhvc3RtYXN0ZXJAc3BpLWluYy5vcmcwHhcNMDgwNTEz
-MDgwNzU2WhcNMTgwNTExMDgwNzU2WjCBvDELMAkGA1UEBhMCVVMxEDAOBgNVBAgT
-B0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMfU29mdHdh
-cmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1hc3RlcjEe
-MBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcNAQkBFhZo
-b3N0bWFzdGVyQHNwaS1pbmMub3JnMIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIIC
-CgKCAgEA3DbmR0LCxFF1KYdAw9iOIQbSGE7r7yC9kDyFEBOMKVuUY/b0LfEGQpG5
-GcRCaQi/izZF6igFM0lIoCdDkzWKQdh4s/Dvs24t3dHLfer0dSbTPpA67tfnLAS1
-fOH1fMVO73e9XKKTM5LOfYFIz2u1IiwIg/3T1c87Lf21SZBb9q1NE8re06adU1Fx
-Y0b4ShZcmO4tbZoWoXaQ4mBDmdaJ1mwuepiyCwMs43pPx93jzONKao15Uvr0wa8u
-jyoIyxspgpJyQ7zOiKmqp4pRQ1WFmjcDeJPI8L20QcgHQprLNZd6ioFl3h1UCAHx
-ZFy3FxpRvB7DWYd2GBaY7r/2Z4GLBjXFS21ZGcfSxki+bhQog0oQnBv1b7ypjvVp
-/rLBVcznFMn5WxRTUQfqzj3kTygfPGEJ1zPSbqdu1McTCW9rXRTunYkbpWry9vjQ
-co7qch8vNGopCsUK7BxAhRL3pqXTT63AhYxMfHMgzFMY8bJYTAH1v+pk1Vw5xc5s
-zFNaVrpBDyXfa1C2x4qgvQLCxTtVpbJkIoRRKFauMe5e+wsWTUYFkYBE7axt8Feo
-+uthSKDLG7Mfjs3FIXcDhB78rKNDCGOM7fkn77SwXWfWT+3Qiz5dW8mRvZYChD3F
-TbxCP3T9PF2sXEg2XocxLxhsxGjuoYvJWdAY4wCAs1QnLpnwFVMCAwEAAaOCAg8w
-ggILMB0GA1UdDgQWBBQ0cdE41xU2g0dr1zdkQjuOjVKdqzCB8QYDVR0jBIHpMIHm
-gBQ0cdE41xU2g0dr1zdkQjuOjVKdq6GBwqSBvzCBvDELMAkGA1UEBhMCVVMxEDAO
-BgNVBAgTB0luZGlhbmExFTATBgNVBAcTDEluZGlhbmFwb2xpczEoMCYGA1UEChMf
-U29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDETMBEGA1UECxMKaG9zdG1h
-c3RlcjEeMBwGA1UEAxMVQ2VydGlmaWNhdGUgQXV0aG9yaXR5MSUwIwYJKoZIhvcN
-AQkBFhZob3N0bWFzdGVyQHNwaS1pbmMub3JnggkA6I62yfgqFCgwDwYDVR0TAQH/
-BAUwAwEB/zARBglghkgBhvhCAQEEBAMCAAcwCQYDVR0SBAIwADAuBglghkgBhvhC
-AQ0EIRYfU29mdHdhcmUgaW4gdGhlIFB1YmxpYyBJbnRlcmVzdDAwBglghkgBhvhC
-AQQEIxYhaHR0cHM6Ly9jYS5zcGktaW5jLm9yZy9jYS1jcmwucGVtMDIGCWCGSAGG
-+EIBAwQlFiNodHRwczovL2NhLnNwaS1pbmMub3JnL2NlcnQtY3JsLnBlbTAhBgNV
-HREEGjAYgRZob3N0bWFzdGVyQHNwaS1pbmMub3JnMA4GA1UdDwEB/wQEAwIBBjAN
-BgkqhkiG9w0BAQUFAAOCAgEAtM294LnqsgMrfjLp3nI/yUuCXp3ir1UJogxU6M8Y
-PCggHam7AwIvUjki+RfPrWeQswN/2BXja367m1YBrzXU2rnHZxeb1NUON7MgQS4M
-AcRb+WU+wmHo0vBqlXDDxm/VNaSsWXLhid+hoJ0kvSl56WEq2dMeyUakCHhBknIP
-qxR17QnwovBc78MKYiC3wihmrkwvLo9FYyaW8O4x5otVm6o6+YI5HYg84gd1GuEP
-sTC8cTLSOv76oYnzQyzWcsR5pxVIBcDYLXIC48s9Fmq6ybgREOJJhcyWR2AFJS7v
-dVkz9UcZFu/abF8HyKZQth3LZjQl/GaD68W2MEH4RkRiqMEMVObqTFoo5q7Gt/5/
-O5aoLu7HaD7dAD0prypjq1/uSSotxdz70cbT0ZdWUoa2lOvUYFG3/B6bzAKb1B+P
-+UqPti4oOxfMxaYF49LTtcYDyeFIQpvLP+QX4P4NAZUJurgNceQJcHdC2E3hQqlg
-g9cXiUPS1N2nGLar1CQlh7XU4vwuImm9rWgs/3K1mKoGnOcqarihk3bOsPN/nOHg
-T7jYhkalMwIsJWE3KpLIrIF0aGOHM3a9BX9e1dUCbb2v/ypaqknsmHlHU5H2DjRa
-yaXG67Ljxay2oHA1u8hRadDytaIybrw/oDc5fHE2pgXfDBLkFqfF1stjo5VwP+YE
-o2A=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIDnzCCAoegAwIBAgIBJjANBgkqhkiG9w0BAQUFADBxMQswCQYDVQQGEwJERTEc
-MBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxlU2Vj
-IFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290IENB
-IDIwHhcNOTkwNzA5MTIxMTAwWhcNMTkwNzA5MjM1OTAwWjBxMQswCQYDVQQGEwJE
-RTEcMBoGA1UEChMTRGV1dHNjaGUgVGVsZWtvbSBBRzEfMB0GA1UECxMWVC1UZWxl
-U2VjIFRydXN0IENlbnRlcjEjMCEGA1UEAxMaRGV1dHNjaGUgVGVsZWtvbSBSb290
-IENBIDIwggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQCrC6M14IspFLEU
-ha88EOQ5bzVdSq7d6mGNlUn0b2SjGmBmpKlAIoTZ1KXleJMOaAGtuU1cOs7TuKhC
-QN/Po7qCWWqSG6wcmtoIKyUn+WkjR/Hg6yx6m/UTAtB+NHzCnjwAWav12gz1Mjwr
-rFDa1sPeg5TKqAyZMg4ISFZbavva4VhYAUlfckE8FQYBjl2tqriTtM2e66foai1S
-NNs671x1Udrb8zH57nGYMsRUFUQM+ZtV7a3fGAigo4aKSe5TBY8ZTNXeWHmb0moc
-QqvF1afPaA+W5OFhmHZhyJF81j4A4pFQh+GdCuatl9Idxjp9y7zaAzTVjlsB9WoH
-txa2bkp/AgMBAAGjQjBAMB0GA1UdDgQWBBQxw3kbuvVT1xfgiXotF2wKsyudMzAP
-BgNVHRMECDAGAQH/AgEFMA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOC
-AQEAlGRZrTlk5ynrE/5aw4sTV8gEJPB0d8Bg42f76Ymmg7+Wgnxu1MM9756Abrsp
-tJh6sTtU6zkXR34ajgv8HzFZMQSyzhfzLMdiNlXiItiJVbSYSKpk+tYcNthEeFpa
-IzpXl/V6ME+un2pMSyuOoAPjPuCp1NJ70rOo4nI8rZ7/gFnkm0W09juwzTkZmDLl
-6iFhkOQxIY40sfcvNUqFENrnijchvllj4PKFiDFT1FQUhXB59C4Gdyd1Lx+4ivn+
-xbrYNuSD7Odlt79jWvNGr4GUN9RBjNYj1h7P9WgbRGOiWrqnNVmh5XAFmw4jV5mU
-Cm26OWMohpLzGITY+9HPBVZkVw==
------END CERTIFICATE-----
-
------BEGIN CERTIFICATE-----
-MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
-ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
-MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
-QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
-b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
-b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
-KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
-VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
-SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
-cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
-6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
-MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
-kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
-BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
-BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
-c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
-AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
-BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
-OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
-A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
-0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
-RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
-qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
-U+4=
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----
-MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
-bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
-BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
-DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
-YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
-ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
-N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
-r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
-f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
-U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
-TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
-VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
-SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
-biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
-MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
-AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
-ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
-Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
-IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
-bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
-QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
-WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
-SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
------END CERTIFICATE-----
------BEGIN CERTIFICATE-----\r
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\r
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\r
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\r
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\r
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy\r
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\r
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\r
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\r
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\r
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY\r
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9\r
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS\r
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v\r
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu\r
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC\r
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd\r
------END CERTIFICATE-----\r
+++ /dev/null
-This directory contains certificate/public keys/private keys used to create unittests.
-Passwort to private keys is "1234" or "secret".
\ No newline at end of file
+++ /dev/null
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- c7:4a:82:f6:9d:1b:f6:7e
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=PL, ST=Maz, O=Samsung, OU=SPRC, CN=Samsung/emailAddress=samsung@samsung.com
- Validity
- Not Before: Oct 5 12:00:51 2011 GMT
- Not After : Oct 2 12:00:51 2021 GMT
- Subject: C=PL, ST=MAZ, L=Leg, O=Sam, OU=SPRC, CN=Filip/emailAddress=filip@samsung.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:d2:fe:c4:b4:c1:74:82:6f:7e:28:8c:df:1b:58:
- 57:78:3e:5f:5e:4c:b1:e1:d7:c5:0d:1a:c3:e9:2e:
- 9a:78:8a:d7:5f:b9:cf:ce:83:2a:9a:4a:80:f0:07:
- 35:61:11:60:15:2c:24:f1:7b:15:1a:e0:d7:2f:6b:
- ee:35:35:b9:16:e1:10:ac:17:37:86:b3:49:2d:a6:
- ed:7e:f1:0f:af:d1:01:0e:1a:a5:45:da:b4:24:82:
- 29:73:0c:5f:e8:3b:9e:85:c7:0f:6f:1b:53:80:fa:
- a7:50:77:7c:8e:01:5d:84:a8:b3:41:3e:b1:18:07:
- d2:b9:18:5c:9f:7e:b6:a4:49
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:FALSE
- Netscape Comment:
- OpenSSL Generated Certificate
- X509v3 Subject Key Identifier:
- 7B:2C:B7:89:5E:F9:2A:D3:A4:A4:F1:5D:EA:69:D1:F5:D1:46:64:CC
- X509v3 Authority Key Identifier:
- keyid:82:08:7F:DB:00:02:86:E8:53:2A:A5:FA:58:AE:67:7F:14:38:C8:60
-
- Signature Algorithm: sha1WithRSAEncryption
- 0e:db:f4:08:1a:d0:d5:00:8c:1f:d8:ca:16:3a:52:a6:ae:f3:
- 14:a3:17:41:e5:6d:6f:f6:62:7b:cd:b7:ff:fc:28:89:c8:3c:
- 93:19:cf:e6:c4:b8:74:95:8d:5c:d6:f5:88:c2:dd:86:05:7c:
- d2:0d:72:b7:78:13:58:fc:53:b4:5c:e9:ad:0c:8d:88:91:d3:
- 9a:b6:cd:59:72:d7:d6:ba:11:54:65:04:fc:8f:10:e3:17:b1:
- aa:96:cd:94:92:16:d8:98:e6:fe:4a:a8:29:f9:ca:c4:e4:46:
- e8:73:4f:5d:95:76:f4:d6:36:7c:34:4f:3c:e2:18:a0:54:33:
- ad:72
------BEGIN CERTIFICATE-----
-MIIC4zCCAkygAwIBAgIJAMdKgvadG/Z+MA0GCSqGSIb3DQEBBQUAMHIxCzAJBgNV
-BAYTAlBMMQwwCgYDVQQIEwNNYXoxEDAOBgNVBAoTB1NhbXN1bmcxDTALBgNVBAsT
-BFNQUkMxEDAOBgNVBAMTB1NhbXN1bmcxIjAgBgkqhkiG9w0BCQEWE3NhbXN1bmdA
-c2Ftc3VuZy5jb20wHhcNMTExMDA1MTIwMDUxWhcNMjExMDAyMTIwMDUxWjB4MQsw
-CQYDVQQGEwJQTDEMMAoGA1UECBMDTUFaMQwwCgYDVQQHEwNMZWcxDDAKBgNVBAoT
-A1NhbTENMAsGA1UECxMEU1BSQzEOMAwGA1UEAxMFRmlsaXAxIDAeBgkqhkiG9w0B
-CQEWEWZpbGlwQHNhbXN1bmcuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKB
-gQDS/sS0wXSCb34ojN8bWFd4Pl9eTLHh18UNGsPpLpp4itdfuc/OgyqaSoDwBzVh
-EWAVLCTxexUa4Ncva+41NbkW4RCsFzeGs0ktpu1+8Q+v0QEOGqVF2rQkgilzDF/o
-O56Fxw9vG1OA+qdQd3yOAV2EqLNBPrEYB9K5GFyffrakSQIDAQABo3sweTAJBgNV
-HRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVyYXRlZCBDZXJ0aWZp
-Y2F0ZTAdBgNVHQ4EFgQUeyy3iV75KtOkpPFd6mnR9dFGZMwwHwYDVR0jBBgwFoAU
-ggh/2wAChuhTKqX6WK5nfxQ4yGAwDQYJKoZIhvcNAQEFBQADgYEADtv0CBrQ1QCM
-H9jKFjpSpq7zFKMXQeVtb/Zie823//woicg8kxnP5sS4dJWNXNb1iMLdhgV80g1y
-t3gTWPxTtFzprQyNiJHTmrbNWXLX1roRVGUE/I8Q4xexqpbNlJIW2Jjm/kqoKfnK
-xORG6HNPXZV29NY2fDRPPOIYoFQzrXI=
------END CERTIFICATE-----
+++ /dev/null
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,FDE9F633EA955697
-
-ASWLPmOFfKlo46nJXTJLCkhvD/q1MsHXPaaSByVzaavXxwMxOc2g7VkIR2D0yViQ
-mxQFhJLVeq/1UI9pXL2+zk0awptHogwjTw81r2I+R6qkHsSjGjl4Ds6hOX3J211K
-UqO4+3kf6JJOizXbH/y6WWbj9jEJeE7zzmhuyq8k6Kp47leZsle5y13usii323tz
-OgAzZGsQBSkrlBNKKM58O7TkCO6UbZLjVEoBqcJU+p+UiKoGKdUV/MxkbGEKTEPN
-wrFiqIxSk9KuV5iDAjnYCPz6iQIE+Q3NOW+MTw0yjWoMb7uXJexGM6VYkYFZUffe
-16nAzJpYbG+CsJ5XTiGoiodazloVYdnDFnbDLDGS2kLgiuuHzF/DL1lFlbXwgpGj
-sXFp6CemJ+KnMz4aIfC63Wuav+jvAVw26pl/cYxbhboSkl+H9ZKbk+KcIeMN1Rb7
-LD35tsjO5rnQ1QlG0WP6qT6O1SPG/4GgJTyzTwuw6i8jQw62ahKB5hTri/Z8Fmrn
-kFh8F7gTJ+YnxrQuTK8r9QrZrXsE/YqUbHtVEI/m/6uydWdFHNWzJxe6oavuwks2
-3mumh1101mBEuEClzOzHP925oeXW+N8R+jFnA/7NkIjeOo+J9Z+QzBiq6DVJcuEY
-5aqXcCIS9AciUoh3/ovtT637r25nhYwCruZLZ+4+Vkpv9n/gPSipHXgHt2cynaID
-6O7xyoADa+zY1zTRd+A4aA+SWd/bxvKe+6sc/6iBlKA8bKwfPJcwg7il4bX4g5dk
-dI8gTyM9puDoHrdTaLwY8+JL0MCguEvkk7LDttNfN0gxYvxXTpZ+Tg==
------END RSA PRIVATE KEY-----
+++ /dev/null
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- c7:4a:82:f6:9d:1b:f6:7f
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=PL, ST=Maz, O=Samsung, OU=SPRC, CN=Samsung/emailAddress=samsung@samsung.com
- Validity
- Not Before: Oct 5 12:11:33 2011 GMT
- Not After : Oct 2 12:11:33 2021 GMT
- Subject: C=PL, ST=Mazowieckie, L=legionowo, O=samsung, OU=sprc, CN=magda/emailAddress=magda@samsung.com
- Subject Public Key Info:
- Public Key Algorithm: dsaEncryption
- DSA Public Key:
- pub:
- 00:ac:40:42:0e:cc:a8:28:24:0b:43:09:7e:d6:23:
- 35:a2:8c:e6:7d:62:66:fe:23:d6:58:b8:f7:32:9f:
- 63:99:d3:2c:ff:af:60:0b:e0:d2:8c:0b:35:8b:c9:
- e6:77:0a:7d:8d:43:00:23:d4:e3:ff:ad:0b:b4:d3:
- b9:af:79:c2:08:f9:af:0b:c0:5e:7c:e0:4b:23:86:
- b9:2a:f4:7c:af:43:ca:b1:fa:13:42:df:5d:3f:96:
- b8:84:07:6a:19:b6:89:26:f1:a8:fa:c2:86:59:e9:
- e7:f1:17:0d:30:5a:3b:a4:1f:76:9a:b4:04:fe:3c:
- 0a:56:5e:6f:17:00:f9:36:05
- P:
- 00:b5:3c:23:9a:b0:58:65:7c:c7:35:ca:37:5c:a7:
- bc:e4:cd:71:a2:5b:e3:29:56:e1:65:b1:d6:30:90:
- 06:bd:b0:8b:cd:ad:02:e2:da:e9:71:72:73:41:78:
- 21:ca:0d:b9:3b:53:e2:77:fd:0c:0e:d9:76:a7:6a:
- 94:0c:52:ab:df:8d:f8:cb:d5:04:39:55:fe:c4:35:
- 45:8f:34:fe:dc:12:fc:7c:d8:d6:f9:8d:67:47:c9:
- 17:d5:ff:f4:dc:88:16:4d:f0:62:cd:11:b7:e1:b5:
- 69:61:23:a0:9b:0d:6d:40:69:8d:27:3d:9f:3b:f6:
- b4:88:93:bf:da:34:a6:77:15
- Q:
- 00:b7:2b:f2:e4:00:9a:75:7e:dc:32:c8:03:99:d3:
- a3:40:60:d1:b8:cb
- G:
- 24:6e:e6:79:4b:50:6c:cb:a5:44:c7:63:cd:e0:a8:
- c9:ad:85:5d:d9:be:e1:a7:2f:22:71:3d:ff:e3:32:
- 6d:74:c1:dd:b1:40:34:cc:b0:e9:64:ef:93:82:bd:
- 44:af:2d:9b:9d:8d:f7:97:32:91:38:e9:01:bc:6a:
- 4c:c6:97:c2:47:56:6c:e1:5d:54:a0:0a:9f:2c:62:
- fd:42:ad:63:d4:3a:36:6c:09:07:68:5b:03:51:94:
- ce:13:e4:a3:ca:c4:75:ae:ba:08:69:74:55:bc:8c:
- d6:52:8c:26:30:3e:c2:9f:69:1b:5d:74:2f:4a:2f:
- d7:d4:3d:7e:fa:8a:a7:95
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:FALSE
- Netscape Comment:
- OpenSSL Generated Certificate
- X509v3 Subject Key Identifier:
- 99:2A:52:86:CC:2F:5A:D1:00:05:DF:A5:DD:6C:5C:71:17:02:C9:D5
- X509v3 Authority Key Identifier:
- keyid:82:08:7F:DB:00:02:86:E8:53:2A:A5:FA:58:AE:67:7F:14:38:C8:60
-
- Signature Algorithm: sha1WithRSAEncryption
- 81:f9:c0:bb:f8:0c:25:10:bf:04:5c:24:82:fa:c7:2f:44:d5:
- e1:f7:cf:54:07:fb:45:29:d9:4b:a8:9b:e0:81:c6:82:bb:d7:
- 26:f2:fe:42:1e:ef:1f:29:2f:64:8a:83:d8:bf:7a:9d:8d:84:
- 69:23:6b:d3:25:eb:4f:cd:58:44:e9:dd:39:05:09:37:1e:18:
- fd:6f:26:e9:ab:2e:e2:1c:c0:34:d6:6a:58:26:c0:a4:f0:c8:
- 30:ae:95:70:f0:35:c2:b2:a0:66:a6:d6:a7:6d:7c:58:1a:88:
- da:ff:69:5d:5d:0e:fa:3a:73:c6:ad:7e:19:e4:15:d9:4b:1b:
- 47:07
------BEGIN CERTIFICATE-----
-MIIEDzCCA3igAwIBAgIJAMdKgvadG/Z/MA0GCSqGSIb3DQEBBQUAMHIxCzAJBgNV
-BAYTAlBMMQwwCgYDVQQIEwNNYXoxEDAOBgNVBAoTB1NhbXN1bmcxDTALBgNVBAsT
-BFNQUkMxEDAOBgNVBAMTB1NhbXN1bmcxIjAgBgkqhkiG9w0BCQEWE3NhbXN1bmdA
-c2Ftc3VuZy5jb20wHhcNMTExMDA1MTIxMTMzWhcNMjExMDAyMTIxMTMzWjCBijEL
-MAkGA1UEBhMCUEwxFDASBgNVBAgTC01hem93aWVja2llMRIwEAYDVQQHEwlsZWdp
-b25vd28xEDAOBgNVBAoTB3NhbXN1bmcxDTALBgNVBAsTBHNwcmMxDjAMBgNVBAMT
-BW1hZ2RhMSAwHgYJKoZIhvcNAQkBFhFtYWdkYUBzYW1zdW5nLmNvbTCCAbcwggEr
-BgcqhkjOOAQBMIIBHgKBgQC1PCOasFhlfMc1yjdcp7zkzXGiW+MpVuFlsdYwkAa9
-sIvNrQLi2ulxcnNBeCHKDbk7U+J3/QwO2XanapQMUqvfjfjL1QQ5Vf7ENUWPNP7c
-Evx82Nb5jWdHyRfV//TciBZN8GLNEbfhtWlhI6CbDW1AaY0nPZ879rSIk7/aNKZ3
-FQIVALcr8uQAmnV+3DLIA5nTo0Bg0bjLAoGAJG7meUtQbMulRMdjzeCoya2FXdm+
-4acvInE9/+MybXTB3bFANMyw6WTvk4K9RK8tm52N95cykTjpAbxqTMaXwkdWbOFd
-VKAKnyxi/UKtY9Q6NmwJB2hbA1GUzhPko8rEda66CGl0VbyM1lKMJjA+wp9pG110
-L0ov19Q9fvqKp5UDgYUAAoGBAKxAQg7MqCgkC0MJftYjNaKM5n1iZv4j1li49zKf
-Y5nTLP+vYAvg0owLNYvJ5ncKfY1DACPU4/+tC7TTua95wgj5rwvAXnzgSyOGuSr0
-fK9DyrH6E0LfXT+WuIQHahm2iSbxqPrChlnp5/EXDTBaO6Qfdpq0BP48ClZebxcA
-+TYFo3sweTAJBgNVHRMEAjAAMCwGCWCGSAGG+EIBDQQfFh1PcGVuU1NMIEdlbmVy
-YXRlZCBDZXJ0aWZpY2F0ZTAdBgNVHQ4EFgQUmSpShswvWtEABd+l3WxccRcCydUw
-HwYDVR0jBBgwFoAUggh/2wAChuhTKqX6WK5nfxQ4yGAwDQYJKoZIhvcNAQEFBQAD
-gYEAgfnAu/gMJRC/BFwkgvrHL0TV4ffPVAf7RSnZS6ib4IHGgrvXJvL+Qh7vHykv
-ZIqD2L96nY2EaSNr0yXrT81YROndOQUJNx4Y/W8m6asu4hzANNZqWCbApPDIMK6V
-cPA1wrKgZqbWp218WBqI2v9pXV0O+jpzxq1+GeQV2UsbRwc=
------END CERTIFICATE-----
+++ /dev/null
------BEGIN DSA PRIVATE KEY-----
-MIIBuwIBAAKBgQC1PCOasFhlfMc1yjdcp7zkzXGiW+MpVuFlsdYwkAa9sIvNrQLi
-2ulxcnNBeCHKDbk7U+J3/QwO2XanapQMUqvfjfjL1QQ5Vf7ENUWPNP7cEvx82Nb5
-jWdHyRfV//TciBZN8GLNEbfhtWlhI6CbDW1AaY0nPZ879rSIk7/aNKZ3FQIVALcr
-8uQAmnV+3DLIA5nTo0Bg0bjLAoGAJG7meUtQbMulRMdjzeCoya2FXdm+4acvInE9
-/+MybXTB3bFANMyw6WTvk4K9RK8tm52N95cykTjpAbxqTMaXwkdWbOFdVKAKnyxi
-/UKtY9Q6NmwJB2hbA1GUzhPko8rEda66CGl0VbyM1lKMJjA+wp9pG110L0ov19Q9
-fvqKp5UCgYEArEBCDsyoKCQLQwl+1iM1oozmfWJm/iPWWLj3Mp9jmdMs/69gC+DS
-jAs1i8nmdwp9jUMAI9Tj/60LtNO5r3nCCPmvC8BefOBLI4a5KvR8r0PKsfoTQt9d
-P5a4hAdqGbaJJvGo+sKGWenn8RcNMFo7pB92mrQE/jwKVl5vFwD5NgUCFC0583uX
-PgTY5e9pOTVpCwebt50S
------END DSA PRIVATE KEY-----
+++ /dev/null
------BEGIN CERTIFICATE-----
-MIIFVTCCBD2gAwIBAgIHBBrt1FojCzANBgkqhkiG9w0BAQUFADCByjELMAkGA1UE
-BhMCVVMxEDAOBgNVBAgTB0FyaXpvbmExEzARBgNVBAcTClNjb3R0c2RhbGUxGjAY
-BgNVBAoTEUdvRGFkZHkuY29tLCBJbmMuMTMwMQYDVQQLEypodHRwOi8vY2VydGlm
-aWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkxMDAuBgNVBAMTJ0dvIERhZGR5
-IFNlY3VyZSBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTERMA8GA1UEBRMIMDc5Njky
-ODcwHhcNMTAwNjA5MDIwNzU3WhcNMTEwNjE5MTEwNDM2WjBRMRUwEwYDVQQKEwwq
-LnVidW50dS5jb20xITAfBgNVBAsTGERvbWFpbiBDb250cm9sIFZhbGlkYXRlZDEV
-MBMGA1UEAxMMKi51YnVudHUuY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIB
-CgKCAQEAu8VcCeGdREV3PYYQukyrfUAay8Ic3fMhA+YUKzqbH8UuPhcjjS3izxaT
-vHLh7v80HS4DXYu6CqoQugZndV4R9KqJN1HVK5acar91VOeQgTSoowTSFtyg6aXJ
-JVdEETyftGHSpS4WjyQZ9FazTfC47c5lJr+3wCZ90UaxaWpNERpMc2L4ZxG1wGCw
-XYWVONtV817NecZVAiytvNPSmcnFm/OC/5GtzxNhfYmsNt1+MiC3IUFe2XnQwFhG
-rvn9IcG2RhEKOOu55pHM08FcnDbfyegBkEDAmQbFIUM+tFUI7nkDNQWy/Mgzuqtg
-DjydGu8h7BObEFrqXtUpm9CbTFZgzwIDAQABo4IBtjCCAbIwDwYDVR0TAQH/BAUw
-AwEBADAdBgNVHSUEFjAUBggrBgEFBQcDAQYIKwYBBQUHAwIwDgYDVR0PAQH/BAQD
-AgWgMDMGA1UdHwQsMCowKKAmoCSGImh0dHA6Ly9jcmwuZ29kYWRkeS5jb20vZ2Rz
-MS0xOS5jcmwwUwYDVR0gBEwwSjBIBgtghkgBhv1tAQcXATA5MDcGCCsGAQUFBwIB
-FitodHRwOi8vY2VydGlmaWNhdGVzLmdvZGFkZHkuY29tL3JlcG9zaXRvcnkvMIGA
-BggrBgEFBQcBAQR0MHIwJAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmdvZGFkZHku
-Y29tLzBKBggrBgEFBQcwAoY+aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
-bS9yZXBvc2l0b3J5L2dkX2ludGVybWVkaWF0ZS5jcnQwHwYDVR0jBBgwFoAU/axh
-MpNsRdbi7oVfmrrndplozOcwIwYDVR0RBBwwGoIMKi51YnVudHUuY29tggp1YnVu
-dHUuY29tMB0GA1UdDgQWBBTUVPFNlBiCNfPjhD8O8mDUv7MLUjANBgkqhkiG9w0B
-AQUFAAOCAQEAUjuOqqu+vS0StsxVXj44hvPye1MC/MkanIrdce5BgYMc5a+8UJba
-ay8h34vtsvfDsTifNY8ijDx79Hprh9V2LwfWWAiWK2SdrceIdGrxDvzmDHllO5YT
-ig2XhAA7ll4toSnrUfsZmi/bgb1V6VNoq36xvK+riDGnPhc7tNDZZb1fBKE+nA1p
-CZq80Liv1xri4Nj1YQ0kMQQnSHkUgEGg7bvtf+cNkIp3OXTNW8f7VFoaWVZNKW8c
-cxNljypjJM+h7xXCG/YRKws8eCi+xpO1Oc41tnSvbCbc0B6+xwFjRx5tfja309QI
-R2+uBFsmWtBCtn31o4CFNytEnwBOPVbZBA==
------END CERTIFICATE-----
+++ /dev/null
------BEGIN CERTIFICATE-----
-MIIE3jCCA8agAwIBAgICAwEwDQYJKoZIhvcNAQEFBQAwYzELMAkGA1UEBhMCVVMx
-ITAfBgNVBAoTGFRoZSBHbyBEYWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28g
-RGFkZHkgQ2xhc3MgMiBDZXJ0aWZpY2F0aW9uIEF1dGhvcml0eTAeFw0wNjExMTYw
-MTU0MzdaFw0yNjExMTYwMTU0MzdaMIHKMQswCQYDVQQGEwJVUzEQMA4GA1UECBMH
-QXJpem9uYTETMBEGA1UEBxMKU2NvdHRzZGFsZTEaMBgGA1UEChMRR29EYWRkeS5j
-b20sIEluYy4xMzAxBgNVBAsTKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5j
-b20vcmVwb3NpdG9yeTEwMC4GA1UEAxMnR28gRGFkZHkgU2VjdXJlIENlcnRpZmlj
-YXRpb24gQXV0aG9yaXR5MREwDwYDVQQFEwgwNzk2OTI4NzCCASIwDQYJKoZIhvcN
-AQEBBQADggEPADCCAQoCggEBAMQt1RWMnCZM7DI161+4WQFapmGBWTtwY6vj3D3H
-KrjJM9N55DrtPDAjhI6zMBS2sofDPZVUBJ7fmd0LJR4h3mUpfjWoqVTr9vcyOdQm
-VZWt7/v+WIbXnvQAjYwqDL1CBM6nPwT27oDyqu9SoWlm2r4arV3aLGbqGmu75RpR
-SgAvSMeYddi5Kcju+GZtCpyz8/x4fKL4o/K1w/O5epHBp+YlLpyo7RJlbmr2EkRT
-cDCVw5wrWCs9CHRK8r5RsL+H0EwnWGu1NcWdrxcx+AuP7q2BNgWJCJjPOq8lh8BJ
-6qf9Z/dFjpfMFDniNoW1fho3/Rb2cRGadDAW/hOUoz+EDU8CAwEAAaOCATIwggEu
-MB0GA1UdDgQWBBT9rGEyk2xF1uLuhV+auud2mWjM5zAfBgNVHSMEGDAWgBTSxLDS
-kdRMEXGzYcs9of7dqGrU4zASBgNVHRMBAf8ECDAGAQH/AgEAMDMGCCsGAQUFBwEB
-BCcwJTAjBggrBgEFBQcwAYYXaHR0cDovL29jc3AuZ29kYWRkeS5jb20wRgYDVR0f
-BD8wPTA7oDmgN4Y1aHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNvbS9yZXBv
-c2l0b3J5L2dkcm9vdC5jcmwwSwYDVR0gBEQwQjBABgRVHSAAMDgwNgYIKwYBBQUH
-AgEWKmh0dHA6Ly9jZXJ0aWZpY2F0ZXMuZ29kYWRkeS5jb20vcmVwb3NpdG9yeTAO
-BgNVHQ8BAf8EBAMCAQYwDQYJKoZIhvcNAQEFBQADggEBANKGwOy9+aG2Z+5mC6IG
-OgRQjhVyrEp0lVPLN8tESe8HkGsz2ZbwlFalEzAFPIUyIXvJxwqoJKSQ3kbTJSMU
-A2fCENZvD117esyfxVgqwcSeIaha86ykRvOe5GPLL5CkKSkB2XIsKd83ASe8T+5o
-0yGPwLPk9Qnt0hCqU7S+8MxZC9Y7lhyVJEnfzuz9p0iRFEUOOjZv2kWzRaJBydTX
-RE4+uXR21aITVSzGh6O1mawGhId/dQb8vxRMDsxuxN89txJx9OjxUUAiKEngHUuH
-qDTMBqLdElrRhjZkAzVvb3du6/KFUJheqwNTrZEjYx8WnM25sgVjOuH0aBsXBTWV
-U+4=
------END CERTIFICATE-----
+++ /dev/null
------BEGIN CERTIFICATE-----
-MIIE+zCCBGSgAwIBAgICAQ0wDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1Zh
-bGlDZXJ0IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIElu
-Yy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24g
-QXV0aG9yaXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAe
-BgkqhkiG9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTA0MDYyOTE3MDYyMFoX
-DTI0MDYyOTE3MDYyMFowYzELMAkGA1UEBhMCVVMxITAfBgNVBAoTGFRoZSBHbyBE
-YWRkeSBHcm91cCwgSW5jLjExMC8GA1UECxMoR28gRGFkZHkgQ2xhc3MgMiBDZXJ0
-aWZpY2F0aW9uIEF1dGhvcml0eTCCASAwDQYJKoZIhvcNAQEBBQADggENADCCAQgC
-ggEBAN6d1+pXGEmhW+vXX0iG6r7d/+TvZxz0ZWizV3GgXne77ZtJ6XCAPVYYYwhv
-2vLM0D9/AlQiVBDYsoHUwHU9S3/Hd8M+eKsaA7Ugay9qK7HFiH7Eux6wwdhFJ2+q
-N1j3hybX2C32qRe3H3I2TqYXP2WYktsqbl2i/ojgC95/5Y0V4evLOtXiEqITLdiO
-r18SPaAIBQi2XKVlOARFmR6jYGB0xUGlcmIbYsUfb18aQr4CUWWoriMYavx4A6lN
-f4DD+qta/KFApMoZFv6yyO9ecw3ud72a9nmYvLEHZ6IVDd2gWMZEewo+YihfukEH
-U1jPEX44dMX4/7VpkI+EdOqXG68CAQOjggHhMIIB3TAdBgNVHQ4EFgQU0sSw0pHU
-TBFxs2HLPaH+3ahq1OMwgdIGA1UdIwSByjCBx6GBwaSBvjCBuzEkMCIGA1UEBxMb
-VmFsaUNlcnQgVmFsaWRhdGlvbiBOZXR3b3JrMRcwFQYDVQQKEw5WYWxpQ2VydCwg
-SW5jLjE1MDMGA1UECxMsVmFsaUNlcnQgQ2xhc3MgMiBQb2xpY3kgVmFsaWRhdGlv
-biBBdXRob3JpdHkxITAfBgNVBAMTGGh0dHA6Ly93d3cudmFsaWNlcnQuY29tLzEg
-MB4GCSqGSIb3DQEJARYRaW5mb0B2YWxpY2VydC5jb22CAQEwDwYDVR0TAQH/BAUw
-AwEB/zAzBggrBgEFBQcBAQQnMCUwIwYIKwYBBQUHMAGGF2h0dHA6Ly9vY3NwLmdv
-ZGFkZHkuY29tMEQGA1UdHwQ9MDswOaA3oDWGM2h0dHA6Ly9jZXJ0aWZpY2F0ZXMu
-Z29kYWRkeS5jb20vcmVwb3NpdG9yeS9yb290LmNybDBLBgNVHSAERDBCMEAGBFUd
-IAAwODA2BggrBgEFBQcCARYqaHR0cDovL2NlcnRpZmljYXRlcy5nb2RhZGR5LmNv
-bS9yZXBvc2l0b3J5MA4GA1UdDwEB/wQEAwIBBjANBgkqhkiG9w0BAQUFAAOBgQC1
-QPmnHfbq/qQaQlpE9xXUhUaJwL6e4+PrxeNYiY+Sn1eocSxI0YGyeR+sBjUZsE4O
-WBsUs5iB0QQeyAfJg594RAoYC5jcdnplDQ1tgMQLARzLrUc+cb53S8wGd9D0Vmsf
-SxOaFIqII6hR8INMqzW/Rn453HWkrugp++85j09VZw==
------END CERTIFICATE-----
+++ /dev/null
------BEGIN CERTIFICATE-----\r
-MIIC5zCCAlACAQEwDQYJKoZIhvcNAQEFBQAwgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0\r
-IFZhbGlkYXRpb24gTmV0d29yazEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAz\r
-BgNVBAsTLFZhbGlDZXJ0IENsYXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9y\r
-aXR5MSEwHwYDVQQDExhodHRwOi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG\r
-9w0BCQEWEWluZm9AdmFsaWNlcnQuY29tMB4XDTk5MDYyNjAwMTk1NFoXDTE5MDYy\r
-NjAwMTk1NFowgbsxJDAiBgNVBAcTG1ZhbGlDZXJ0IFZhbGlkYXRpb24gTmV0d29y\r
-azEXMBUGA1UEChMOVmFsaUNlcnQsIEluYy4xNTAzBgNVBAsTLFZhbGlDZXJ0IENs\r
-YXNzIDIgUG9saWN5IFZhbGlkYXRpb24gQXV0aG9yaXR5MSEwHwYDVQQDExhodHRw\r
-Oi8vd3d3LnZhbGljZXJ0LmNvbS8xIDAeBgkqhkiG9w0BCQEWEWluZm9AdmFsaWNl\r
-cnQuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDOOnHK5avIWZJV16vY\r
-dA757tn2VUdZZUcOBVXc65g2PFxTXdMwzzjsvUGJ7SVCCSRrCl6zfN1SLUzm1NZ9\r
-WlmpZdRJEy0kTRxQb7XBhVQ7/nHk01xC+YDgkRoKWzk2Z/M/VXwbP7RfZHM047QS\r
-v4dk+NoS/zcnwbNDu+97bi5p9wIDAQABMA0GCSqGSIb3DQEBBQUAA4GBADt/UG9v\r
-UJSZSWI4OB9L+KXIPqeCgfYrx+jFzug6EILLGACOTb2oWH+heQC1u+mNr0HZDzTu\r
-IYEZoDJJKPTEjlbVUjP9UNV+mWwD5MlM/Mtsq2azSiGM5bUMMj4QssxsodyamEwC\r
-W/POuZ6lcg5Ktz885hZo+L7tdEy8W9ViH0Pd\r
------END CERTIFICATE-----\r
+++ /dev/null
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 85:7d:e1:c5:d9:de:7a:1f
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=PL, ST=Mazowieckie, O=Samsung, OU=SPRC, CN=Operator Test Root Certificate/emailAddress=operator@samsung.com
- Validity
- Not Before: Jan 4 17:27:08 2011 GMT
- Not After : Jan 3 17:27:08 2014 GMT
- Subject: C=PL, ST=Mazowieckie, O=Samsung, OU=SPRC, CN=Operator Test Root Certificate/emailAddress=operator@samsung.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:c3:39:17:a8:f9:d0:69:37:9a:56:44:39:67:10:
- 14:a9:4b:a2:0b:c7:fc:a1:e8:e8:f7:1c:06:f4:9c:
- 83:f7:37:07:9d:9c:2c:1b:46:43:5f:f1:7b:91:a8:
- cd:c0:76:00:d5:9c:c9:28:f7:91:28:b6:97:ec:85:
- b1:10:0f:58:2e:f6:6f:98:b6:ab:7b:ca:08:10:7f:
- 55:32:bf:32:db:a7:c2:86:83:03:ee:41:0a:24:de:
- 17:e3:9d:8f:5b:fa:46:70:78:98:b4:c1:14:77:44:
- ab:59:7c:4c:d3:4a:f7:54:f2:30:0d:38:73:95:9f:
- 21:0e:a9:86:3e:fc:82:4e:0b
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 25:A5:90:9F:4D:3A:A4:19:0A:80:46:5E:F3:FB:20:CE:56:30:33:DA
- X509v3 Authority Key Identifier:
- keyid:25:A5:90:9F:4D:3A:A4:19:0A:80:46:5E:F3:FB:20:CE:56:30:33:DA
- DirName:/C=PL/ST=Mazowieckie/O=Samsung/OU=SPRC/CN=Operator Test Root Certificate/emailAddress=operator@samsung.com
- serial:85:7D:E1:C5:D9:DE:7A:1F
-
- X509v3 Basic Constraints:
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- b9:d7:72:49:09:d8:6f:61:94:51:40:9d:c3:d3:23:53:97:b8:
- 12:ee:cb:dd:57:e6:1f:a2:76:38:5d:42:51:bd:a9:30:19:f7:
- 67:5b:a8:67:4a:9e:a1:f0:a9:22:14:94:77:32:27:79:37:9c:
- 0a:0f:52:80:14:62:00:94:45:85:3b:fd:ad:b4:c3:20:45:ba:
- b7:91:1a:9e:38:51:0f:9b:d5:ce:74:c7:bd:4a:21:9a:2d:b5:
- 71:0b:42:d2:95:72:66:fe:eb:11:ad:62:44:6c:32:4e:b4:00:
- 37:d7:b8:d5:4b:f6:74:36:78:d6:ae:66:b3:ca:6e:42:ff:cb:
- c2:e6
------BEGIN CERTIFICATE-----
-MIIDnzCCAwigAwIBAgIJAIV94cXZ3nofMA0GCSqGSIb3DQEBBQUAMIGSMQswCQYD
-VQQGEwJQTDEUMBIGA1UECBMLTWF6b3dpZWNraWUxEDAOBgNVBAoTB1NhbXN1bmcx
-DTALBgNVBAsTBFNQUkMxJzAlBgNVBAMTHk9wZXJhdG9yIFRlc3QgUm9vdCBDZXJ0
-aWZpY2F0ZTEjMCEGCSqGSIb3DQEJARYUb3BlcmF0b3JAc2Ftc3VuZy5jb20wHhcN
-MTEwMTA0MTcyNzA4WhcNMTQwMTAzMTcyNzA4WjCBkjELMAkGA1UEBhMCUEwxFDAS
-BgNVBAgTC01hem93aWVja2llMRAwDgYDVQQKEwdTYW1zdW5nMQ0wCwYDVQQLEwRT
-UFJDMScwJQYDVQQDEx5PcGVyYXRvciBUZXN0IFJvb3QgQ2VydGlmaWNhdGUxIzAh
-BgkqhkiG9w0BCQEWFG9wZXJhdG9yQHNhbXN1bmcuY29tMIGfMA0GCSqGSIb3DQEB
-AQUAA4GNADCBiQKBgQDDOReo+dBpN5pWRDlnEBSpS6ILx/yh6Oj3HAb0nIP3Nwed
-nCwbRkNf8XuRqM3AdgDVnMko95EotpfshbEQD1gu9m+Ytqt7yggQf1UyvzLbp8KG
-gwPuQQok3hfjnY9b+kZweJi0wRR3RKtZfEzTSvdU8jANOHOVnyEOqYY+/IJOCwID
-AQABo4H6MIH3MB0GA1UdDgQWBBQlpZCfTTqkGQqARl7z+yDOVjAz2jCBxwYDVR0j
-BIG/MIG8gBQlpZCfTTqkGQqARl7z+yDOVjAz2qGBmKSBlTCBkjELMAkGA1UEBhMC
-UEwxFDASBgNVBAgTC01hem93aWVja2llMRAwDgYDVQQKEwdTYW1zdW5nMQ0wCwYD
-VQQLEwRTUFJDMScwJQYDVQQDEx5PcGVyYXRvciBUZXN0IFJvb3QgQ2VydGlmaWNh
-dGUxIzAhBgkqhkiG9w0BCQEWFG9wZXJhdG9yQHNhbXN1bmcuY29tggkAhX3hxdne
-eh8wDAYDVR0TBAUwAwEB/zANBgkqhkiG9w0BAQUFAAOBgQC513JJCdhvYZRRQJ3D
-0yNTl7gS7svdV+YfonY4XUJRvakwGfdnW6hnSp6h8KkiFJR3Mid5N5wKD1KAFGIA
-lEWFO/2ttMMgRbq3kRqeOFEPm9XOdMe9SiGaLbVxC0LSlXJm/usRrWJEbDJOtAA3
-17jVS/Z0NnjWrmazym5C/8vC5g==
------END CERTIFICATE-----
+++ /dev/null
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- 85:7d:e1:c5:d9:de:7a:20
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=PL, ST=Mazowieckie, O=Samsung, OU=SPRC, CN=Operator Test Root Certificate/emailAddress=operator@samsung.com
- Validity
- Not Before: Jan 4 17:34:31 2011 GMT
- Not After : Jan 4 17:34:31 2012 GMT
- Subject: C=PL, ST=Malopolskie, L=Krakow, O=Samsung, OU=N/A, CN=Operator Test Second Level Certificate/emailAddress=second.operator@samsung.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:ba:3c:58:ca:87:1e:59:68:54:8a:54:34:43:61:
- f1:81:e6:35:c1:46:74:16:c7:ff:f9:15:9e:0c:5a:
- 6a:89:c1:13:0c:61:2e:ba:00:e0:71:ea:7e:31:ae:
- 4e:ef:93:58:51:98:97:f3:bf:8a:9b:b2:c1:b7:0c:
- 5f:3f:56:b3:13:3b:d0:80:be:04:66:89:84:50:ca:
- fe:f6:f7:6b:05:3b:30:4e:96:9c:5b:c5:80:bc:d6:
- be:6e:69:f4:b9:9b:4c:06:7a:ed:37:67:b2:fe:45:
- 69:57:62:54:cb:69:69:48:b9:7d:a0:42:f1:b6:dc:
- f2:7f:eb:75:2a:d4:83:69:b9
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Basic Constraints:
- CA:FALSE
- Netscape Comment:
- OpenSSL Generated Certificate
- X509v3 Subject Key Identifier:
- D9:F3:11:BF:98:5A:60:12:7A:85:B5:E7:A7:38:4F:CF:51:1D:C6:B2
- X509v3 Authority Key Identifier:
- keyid:25:A5:90:9F:4D:3A:A4:19:0A:80:46:5E:F3:FB:20:CE:56:30:33:DA
-
- Signature Algorithm: sha1WithRSAEncryption
- 69:6c:26:81:51:91:a6:e6:11:dc:81:35:03:73:85:4f:2f:29:
- 1f:20:f2:23:54:82:ca:8f:b8:a6:e3:3f:cd:72:5e:d7:e7:f5:
- 84:8a:33:e2:51:9f:36:4b:30:85:f4:4f:87:c7:9a:69:0b:15:
- 6e:92:c7:1f:2f:58:a4:57:f8:c2:cd:59:6c:d2:11:63:ae:bb:
- b0:32:3f:09:e7:2e:ad:db:1b:fe:e7:a4:21:43:47:76:e1:de:
- 36:bb:26:3f:16:76:20:ed:a4:68:c1:48:ae:2b:95:fb:f6:d2:
- f2:7f:74:f6:83:e2:89:06:b5:89:54:6e:7f:cf:88:94:66:e8:
- da:32
------BEGIN CERTIFICATE-----
-MIIDPjCCAqegAwIBAgIJAIV94cXZ3nogMA0GCSqGSIb3DQEBBQUAMIGSMQswCQYD
-VQQGEwJQTDEUMBIGA1UECBMLTWF6b3dpZWNraWUxEDAOBgNVBAoTB1NhbXN1bmcx
-DTALBgNVBAsTBFNQUkMxJzAlBgNVBAMTHk9wZXJhdG9yIFRlc3QgUm9vdCBDZXJ0
-aWZpY2F0ZTEjMCEGCSqGSIb3DQEJARYUb3BlcmF0b3JAc2Ftc3VuZy5jb20wHhcN
-MTEwMTA0MTczNDMxWhcNMTIwMTA0MTczNDMxWjCBsTELMAkGA1UEBhMCUEwxFDAS
-BgNVBAgTC01hbG9wb2xza2llMQ8wDQYDVQQHEwZLcmFrb3cxEDAOBgNVBAoTB1Nh
-bXN1bmcxDDAKBgNVBAsTA04vQTEvMC0GA1UEAxMmT3BlcmF0b3IgVGVzdCBTZWNv
-bmQgTGV2ZWwgQ2VydGlmaWNhdGUxKjAoBgkqhkiG9w0BCQEWG3NlY29uZC5vcGVy
-YXRvckBzYW1zdW5nLmNvbTCBnzANBgkqhkiG9w0BAQEFAAOBjQAwgYkCgYEAujxY
-yoceWWhUilQ0Q2HxgeY1wUZ0Fsf/+RWeDFpqicETDGEuugDgcep+Ma5O75NYUZiX
-87+Km7LBtwxfP1azEzvQgL4EZomEUMr+9vdrBTswTpacW8WAvNa+bmn0uZtMBnrt
-N2ey/kVpV2JUy2lpSLl9oELxttzyf+t1KtSDabkCAwEAAaN7MHkwCQYDVR0TBAIw
-ADAsBglghkgBhvhCAQ0EHxYdT3BlblNTTCBHZW5lcmF0ZWQgQ2VydGlmaWNhdGUw
-HQYDVR0OBBYEFNnzEb+YWmASeoW156c4T89RHcayMB8GA1UdIwQYMBaAFCWlkJ9N
-OqQZCoBGXvP7IM5WMDPaMA0GCSqGSIb3DQEBBQUAA4GBAGlsJoFRkabmEdyBNQNz
-hU8vKR8g8iNUgsqPuKbjP81yXtfn9YSKM+JRnzZLMIX0T4fHmmkLFW6Sxx8vWKRX
-+MLNWWzSEWOuu7AyPwnnLq3bG/7npCFDR3bh3ja7Jj8WdiDtpGjBSK4rlfv20vJ/
-dPaD4okGtYlUbn/PiJRm6Noy
------END CERTIFICATE-----
+++ /dev/null
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,44C051D8935528BB
-
-iISuf9ELdyP5M0vlWOK4msH09HRAhN+43qRu/RDznpsTs2lX2sJITXXEmJC4EJzS
-Zk4jf3ScTj1JsMGlg5k0mZWLmDb4kUxTRVUqJX2W4uUYEmWav7LQHRAsPwNUSMs3
-DzZabSf1vplnKKoL9mMtX4E0mj79AkJp7tARQu4Zn2FDMg/UnCErzhGeoFysztmM
-v0Biyrf8yTbatMMr7Ea6rIsKS8KbkEeYDk4LpxBXkMeOutnnUUdhUEXZ/mwgJq2e
-+8LLPiWdFsrGxPdub7iuLXidXSpOd9VaC9LN/ORKF+EiJtF+twWSBotxYOtwmtgj
-xUHfXBcbaFoPnLKNS0nxwsOHF07LUfsCHzfVm1uGyWFkkLrPfcSjb6PahFlfO6w5
-fv8HnUOgeAjlhK6X+xhmw1tpwMUlmcYmq31eC8rwxP59jNQbhH6GVr5+rEMRHNgp
-loC1WqthoRtBEC0bi99VpIHVIepe9G+p40sIropoUWftfDSLl3RtONg5GyyZWQ4a
-ROxsiLHDZ7+q8eKkJuYPkiZ61/5MHuOsH5k57PG7ppG6/0p+ED4bTwxxDb6PU4pA
-08xUTZQ0CUn1x80o/lKw+1E9TJOTbCvrEJAnMksfOkNkNyedgDJaxfV63wYvnL4+
-BLzCqa6djpe0Mg2olQieV/piRUt7JaGA7bnaMAn+bJ56PzUnMl0/WlxzGTMtHjkf
-zUqgLLdxZpJP7zl4XleSfRWlPgL1iN1s84x48ej+MGgOGi7xTgX/sfCLkN4No/8k
-c5Po+lQU261XAYNuAjtjUFQP/FgIMM9CnJrDWp8xHZXUJBo0c5lOKg==
------END RSA PRIVATE KEY-----
+++ /dev/null
-Certificate:
- Data:
- Version: 3 (0x2)
- Serial Number:
- c7:4a:82:f6:9d:1b:f6:7d
- Signature Algorithm: sha1WithRSAEncryption
- Issuer: C=PL, ST=Maz, O=Samsung, OU=SPRC, CN=Samsung/emailAddress=samsung@samsung.com
- Validity
- Not Before: Oct 5 11:52:36 2011 GMT
- Not After : Oct 4 11:52:36 2014 GMT
- Subject: C=PL, ST=Maz, O=Samsung, OU=SPRC, CN=Samsung/emailAddress=samsung@samsung.com
- Subject Public Key Info:
- Public Key Algorithm: rsaEncryption
- RSA Public Key: (1024 bit)
- Modulus (1024 bit):
- 00:93:c2:12:8b:3e:b1:69:fe:c8:7e:f1:fa:b0:03:
- d7:bd:25:03:bb:14:70:ab:65:ff:8f:e9:38:14:2b:
- 92:02:d9:e7:b4:78:60:a0:ce:b1:b8:b6:78:c5:af:
- b3:83:3c:47:58:3d:1e:a0:78:69:4d:56:dd:8c:d8:
- 20:27:b2:0d:9f:bf:f1:d4:e1:39:0f:1b:6f:b8:cd:
- ca:f4:0b:fd:d7:cb:64:09:c7:6d:1e:e8:dd:89:43:
- 7f:72:85:3d:9a:54:6e:7c:55:a0:da:f5:e9:28:01:
- ec:3a:da:5a:18:45:fc:28:b1:0e:43:2c:4c:26:5c:
- ca:bc:44:d9:ce:7d:5a:f2:f3
- Exponent: 65537 (0x10001)
- X509v3 extensions:
- X509v3 Subject Key Identifier:
- 82:08:7F:DB:00:02:86:E8:53:2A:A5:FA:58:AE:67:7F:14:38:C8:60
- X509v3 Authority Key Identifier:
- keyid:82:08:7F:DB:00:02:86:E8:53:2A:A5:FA:58:AE:67:7F:14:38:C8:60
- DirName:/C=PL/ST=Maz/O=Samsung/OU=SPRC/CN=Samsung/emailAddress=samsung@samsung.com
- serial:C7:4A:82:F6:9D:1B:F6:7D
-
- X509v3 Basic Constraints:
- CA:TRUE
- Signature Algorithm: sha1WithRSAEncryption
- 0f:cb:a3:cd:25:02:00:17:a9:c5:21:4a:6e:bb:ce:d9:14:74:
- 23:29:c5:47:ff:02:91:5a:ee:a1:53:a7:e4:69:6f:f2:00:bc:
- 09:87:80:f8:3b:a5:51:59:e9:20:1f:1d:5d:cb:91:eb:91:1e:
- f4:79:bf:35:68:a5:ed:24:e5:28:dd:c9:1f:bf:53:f7:75:77:
- 6c:fe:94:0c:de:9c:d9:8e:42:c6:7d:61:6b:5d:5d:ad:a7:6a:
- e4:9b:53:2a:f7:85:9c:51:1d:72:5d:5c:2f:eb:f9:ff:80:4c:
- 6d:46:e8:a0:2c:8a:6f:94:13:b2:00:47:2c:b0:b0:1c:12:fc:
- a0:65
------BEGIN CERTIFICATE-----
-MIIDOjCCAqOgAwIBAgIJAMdKgvadG/Z9MA0GCSqGSIb3DQEBBQUAMHIxCzAJBgNV
-BAYTAlBMMQwwCgYDVQQIEwNNYXoxEDAOBgNVBAoTB1NhbXN1bmcxDTALBgNVBAsT
-BFNQUkMxEDAOBgNVBAMTB1NhbXN1bmcxIjAgBgkqhkiG9w0BCQEWE3NhbXN1bmdA
-c2Ftc3VuZy5jb20wHhcNMTExMDA1MTE1MjM2WhcNMTQxMDA0MTE1MjM2WjByMQsw
-CQYDVQQGEwJQTDEMMAoGA1UECBMDTWF6MRAwDgYDVQQKEwdTYW1zdW5nMQ0wCwYD
-VQQLEwRTUFJDMRAwDgYDVQQDEwdTYW1zdW5nMSIwIAYJKoZIhvcNAQkBFhNzYW1z
-dW5nQHNhbXN1bmcuY29tMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCTwhKL
-PrFp/sh+8fqwA9e9JQO7FHCrZf+P6TgUK5IC2ee0eGCgzrG4tnjFr7ODPEdYPR6g
-eGlNVt2M2CAnsg2fv/HU4TkPG2+4zcr0C/3Xy2QJx20e6N2JQ39yhT2aVG58VaDa
-9ekoAew62loYRfwosQ5DLEwmXMq8RNnOfVry8wIDAQABo4HXMIHUMB0GA1UdDgQW
-BBSCCH/bAAKG6FMqpfpYrmd/FDjIYDCBpAYDVR0jBIGcMIGZgBSCCH/bAAKG6FMq
-pfpYrmd/FDjIYKF2pHQwcjELMAkGA1UEBhMCUEwxDDAKBgNVBAgTA01hejEQMA4G
-A1UEChMHU2Ftc3VuZzENMAsGA1UECxMEU1BSQzEQMA4GA1UEAxMHU2Ftc3VuZzEi
-MCAGCSqGSIb3DQEJARYTc2Ftc3VuZ0BzYW1zdW5nLmNvbYIJAMdKgvadG/Z9MAwG
-A1UdEwQFMAMBAf8wDQYJKoZIhvcNAQEFBQADgYEAD8ujzSUCABepxSFKbrvO2RR0
-IynFR/8CkVruoVOn5Glv8gC8CYeA+DulUVnpIB8dXcuR65Ee9Hm/NWil7STlKN3J
-H79T93V3bP6UDN6c2Y5Cxn1ha11dradq5JtTKveFnFEdcl1cL+v5/4BMbUbooCyK
-b5QTsgBHLLCwHBL8oGU=
------END CERTIFICATE-----
+++ /dev/null
------BEGIN RSA PRIVATE KEY-----
-Proc-Type: 4,ENCRYPTED
-DEK-Info: DES-EDE3-CBC,D2942E015452A445
-
-0M/tC+qVDqyhNsxZZB/dGLuNxsStSUA7TRDRiSBee9JsvcFZjq03D/VjBakNIeET
-6efmKfAngomfvrWtxhped3RI4vasX05swfnr4qiUKjLPyftmNEepbNGeI8MaiD7a
-fEOZuAacstyS5RMHRBXrktq+jtXW2meQTuvEMBJf1AeAIuaFNvr3OvvpCtDwRffi
-1ijUVuG0ZQ6MpP7cGeqLYUZ9StTMxeiEesAPM4YrG7HIY13KaHwMr1ZRtENe7qZ8
-R8vwgW188FYkSSrcQjCVEuj/ztTg9eVuSKdTNgjfKzTWnlrjAzi8CKBsrkYoarwS
-6Rv3TqVVnx4HHdo9RIUKZPeLOdcMD1OPK7aOUedPTAcht3Y7SQQphBQypLf6PLKB
-DCo79B4TUA1W9MijT2d2GN7oJHqHax8zO2j+yCLkEcHF32JZsEFE63Bwss72FXMg
-mTmpCwyzR+oN93687JDUBAP9zNVd76ZnpzwlMZirB6QTY/lrH+iXLH3R3PO6cl2R
-0Jei4IQ1oB+SX6GOPt4tKGTqktUFhsJYbXyifj4O1ZyDVYTp0JafOLxJfU33oYTm
-278yshFdyHRgfKIHvqctZ1xJN2ioVcWf+9DprHc5kGb6wUKRVfQpipTS2hgbMBz+
-UWRZWq+CUD5QkTz4cSQfhPWQF6TNWpTQc0dvAlo3Cmxrro1PriDItsCOeydeNWvn
-Dyynx7ODp/F1rX5ekaXkVxsdGgD/HuNF+c7tEytD7U4/CmevytuXRIrFM0alj2OE
-aBFTqKicBoKgDV9VUOTKwuFeNV7MSuVDUnngEBeYrinwGa7wuV7tzA==
------END RSA PRIVATE KEY-----
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file main.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of main
- */
-#include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
-
-#include <string>
-
-#include <wrt_api.h>
-#include <wrt_installer_api.h>
-
-#include <loop_control.h>
-using namespace LoopControl;
-
-void init_cb (WrtErrStatus status, void* data)
-{
- (void) status;
- (void) data;
- LogInfo("Init Succesfull");
- finish_wait_for_wrt_init();
-}
-
-int main (int argc, char *argv[])
-{
- init_loop(argc, argv);
- LogInfo("Initializing WRT");
- wrt_installer_init_for_tests(NULL, &init_cb);
- wrt_init(NULL, &init_cb);
-
- wait_for_wrt_init();
- LogInfo("Starting tests");
-
- int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
-
- wrt_installer_shutdown_for_tests();
- wrt_shutdown();
- quit_loop();
- return status;
-}
-
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
-# @author Pawel Sikorski (p.sikorski@samsung.com)
-# @version 1.0
-# @brief
-#
-SET(TARGET_W3C_TEST "wrt-tests-w3c")
-
-# Set DPL tests sources
-SET(W3C_TESTS_SOURCES
- ${PROJECT_SOURCE_DIR}/tests/w3c_tests/w3c_tests.cpp
- ${PROJECT_SOURCE_DIR}/tests/w3c_tests/TestCases.cpp
- ${PROJECT_SOURCE_DIR}/tests/w3c_tests/W3CTestBase.cpp
- ${PROJECT_SOURCE_DIR}/tests/w3c_tests/InstallerWrapper.cpp
- )
-
-PKG_CHECK_MODULES(W3CTEST_LIBS
- dpl-test-efl
- dpl-utils-efl
- dpl-wrt-dao-ro
- REQUIRED)
-
-ADD_EXECUTABLE("${TARGET_W3C_TEST}"
- ${W3C_TESTS_SOURCES}
- )
-
-INCLUDE_DIRECTORIES(
- ${CMAKE_CURRENT_SOURCE_DIR}
- ${CMAKE_SOURCE_DIR}/src/localization
- ${CMAKE_SOURCE_DIR}/src/common
- ${W3CTEST_LIBS_INCLUDE_DIRS}
- )
-LINK_DIRECTORIES(
- ${W3CTEST_LIBS_LIBRARY_DIRS}
- )
-TARGET_LINK_LIBRARIES(${TARGET_W3C_TEST}
- ${W3CTEST_LIBS_LIBRARIES}
- ${TARGET_LOCALIZATION_LIB}
- ${TARGET_PROFILING_LIB}
- )
-WRT_TEST_INSTALL(${TARGET_W3C_TEST})
-
-SET(TESTS_DIR ${PROJECT_SOURCE_DIR}/tests/w3c_tests/test-cases/ )
-
-INSTALL(FILES
- ${TESTS_DIR}/ta-qxLSCRCHlN/000/dk.wgt
- ${TESTS_DIR}/i18n-lro/017/i18nlro17.wgt
- ${TESTS_DIR}/i18n-lro/033/i18nlro33.wgt
- ${TESTS_DIR}/i18n-lro/006/i18nlro06.wgt
- ${TESTS_DIR}/i18n-lro/021/i18nlro21.wgt
- ${TESTS_DIR}/i18n-lro/037/i18nlro37.wgt
- ${TESTS_DIR}/i18n-lro/012/i18nlro12.wgt
- ${TESTS_DIR}/i18n-lro/031/i18nlro31.wgt
- ${TESTS_DIR}/i18n-lro/043/i18nlro43.wgt
- ${TESTS_DIR}/i18n-lro/015/i18nlro15.wgt
- ${TESTS_DIR}/i18n-lro/026/i18nlro26.wgt
- ${TESTS_DIR}/i18n-lro/029/i18nlro29.wgt
- ${TESTS_DIR}/i18n-lro/042/i18nlro42.wgt
- ${TESTS_DIR}/i18n-lro/040/i18nlro40.wgt
- ${TESTS_DIR}/i18n-lro/044/i18nlro44.wgt
- ${TESTS_DIR}/i18n-lro/022/i18nlro22.wgt
- ${TESTS_DIR}/i18n-lro/002/i18nlro02.wgt
- ${TESTS_DIR}/i18n-lro/036/i18nlro36.wgt
- ${TESTS_DIR}/i18n-lro/035/i18nlro35.wgt
- ${TESTS_DIR}/i18n-lro/027/i18nlro27.wgt
- ${TESTS_DIR}/i18n-lro/028/i18nlro28.wgt
- ${TESTS_DIR}/i18n-lro/016/i18nlro16.wgt
- ${TESTS_DIR}/i18n-lro/013/i18nlro13.wgt
- ${TESTS_DIR}/i18n-lro/005/i18nlro05.wgt
- ${TESTS_DIR}/i18n-lro/038/i18nlro38.wgt
- ${TESTS_DIR}/i18n-lro/010/i18nlro10.wgt
- ${TESTS_DIR}/i18n-lro/020/i18nlro20.wgt
- ${TESTS_DIR}/i18n-lro/019/i18nlro19.wgt
- ${TESTS_DIR}/i18n-lro/041/i18nlro41.wgt
- ${TESTS_DIR}/i18n-lro/004/i18nlro04.wgt
- ${TESTS_DIR}/i18n-lro/014/i18nlro14.wgt
- ${TESTS_DIR}/i18n-lro/011/i18nlro11.wgt
- ${TESTS_DIR}/i18n-lro/001/i18nlro01.wgt
- ${TESTS_DIR}/i18n-lro/023/i18nlro23.wgt
- ${TESTS_DIR}/i18n-lro/039/i18nlro39.wgt
- ${TESTS_DIR}/i18n-lro/007/i18nlro07.wgt
- ${TESTS_DIR}/i18n-lro/003/i18nlro03.wgt
- ${TESTS_DIR}/i18n-lro/030/i18nlro30.wgt
- ${TESTS_DIR}/i18n-lro/008/i18nlro08.wgt
- ${TESTS_DIR}/i18n-lro/018/i18nlro18.wgt
- ${TESTS_DIR}/i18n-lro/009/i18nlro09.wgt
- ${TESTS_DIR}/i18n-lro/032/i18nlro32.wgt
- ${TESTS_DIR}/i18n-lro/034/i18nlro34.wgt
- ${TESTS_DIR}/ta-RRZxvvTFHx/000/b5.wgt
- ${TESTS_DIR}/ta-RRZxvvTFHx/001/b6.wgt
- ${TESTS_DIR}/ta-roCaKRxZhS/000/d2.wgt
- ${TESTS_DIR}/ta-paWbGHyVrG/000/d4.wgt
- ${TESTS_DIR}/ta-rZdcMBExBX/000/df.wgt
- ${TESTS_DIR}/ta-rZdcMBExBX/002/ha.wgt
- ${TESTS_DIR}/ta-rZdcMBExBX/001/dr.wgt
- ${TESTS_DIR}/ta-LTUJGJFCOU/000/d7.wgt
- ${TESTS_DIR}/ta-LTUJGJFCOU/002/gb.wgt
- ${TESTS_DIR}/ta-LTUJGJFCOU/001/d8.wgt
- ${TESTS_DIR}/ta-MFcsScFEaC/000/d3.wgt
- ${TESTS_DIR}/ta-KNiLPOKdgQ/000/e1.wgt
- ${TESTS_DIR}/ta-luyKMFABLX/000/d5.wgt
- ${TESTS_DIR}/ta-FDGQBROtzW/000/dn.test
- ${TESTS_DIR}/ta-FDGQBROtzW/001/dm
- ${TESTS_DIR}/ta-GVVIvsdEUo/000/z3
- ${TESTS_DIR}/ta-GVVIvsdEUo/002/z5.wgt
- ${TESTS_DIR}/ta-GVVIvsdEUo/001/z4.html
- ${TESTS_DIR}/ta-iuJHnskSHq/000/zz.wgt
- ${TESTS_DIR}/ta-iuJHnskSHq/002/zb.wgt
- ${TESTS_DIR}/ta-iuJHnskSHq/001/za.wgt
- ${TESTS_DIR}/ta-iuJHnskSHq/003/zc.wgt
- ${TESTS_DIR}/ta-iipTwNshRg/000/d1.wgt
- ${TESTS_DIR}/ta-iipTwNshRg/001/ga.wgt
- ${TESTS_DIR}/ta-UScJfQHPPy/006/cy.wgt
- ${TESTS_DIR}/ta-UScJfQHPPy/000/c9.wgt
- ${TESTS_DIR}/ta-UScJfQHPPy/002/cw.wgt
- ${TESTS_DIR}/ta-UScJfQHPPy/005/ct.wgt
- ${TESTS_DIR}/ta-UScJfQHPPy/004/cr.wgt
- ${TESTS_DIR}/ta-UScJfQHPPy/001/cq.wgt
- ${TESTS_DIR}/ta-UScJfQHPPy/003/ce.wgt
- ${TESTS_DIR}/ta-uLHyIMvLwz/000/dl.wgt
- ${TESTS_DIR}/ta-uLHyIMvLwz/002/dp.wgt
- ${TESTS_DIR}/ta-uLHyIMvLwz/001/split.wgt.001
- ${TESTS_DIR}/ta-VerEfVGeTc/000/cf.wgt
- ${TESTS_DIR}/ta-VerEfVGeTc/002/ch.wgt
- ${TESTS_DIR}/ta-VerEfVGeTc/001/cg.wgt
- ${TESTS_DIR}/i18n-rtl/017/i18nrtl17.wgt
- ${TESTS_DIR}/i18n-rtl/033/i18nrtl33.wgt
- ${TESTS_DIR}/i18n-rtl/006/i18nrtl06.wgt
- ${TESTS_DIR}/i18n-rtl/021/i18nrtl21.wgt
- ${TESTS_DIR}/i18n-rtl/037/i18nrtl37.wgt
- ${TESTS_DIR}/i18n-rtl/012/i18nrtl12.wgt
- ${TESTS_DIR}/i18n-rtl/031/i18nrtl31.wgt
- ${TESTS_DIR}/i18n-rtl/043/i18nrtl43.wgt
- ${TESTS_DIR}/i18n-rtl/015/i18nrtl15.wgt
- ${TESTS_DIR}/i18n-rtl/026/i18nrtl26.wgt
- ${TESTS_DIR}/i18n-rtl/029/i18nrtl29.wgt
- ${TESTS_DIR}/i18n-rtl/042/i18nrtl42.wgt
- ${TESTS_DIR}/i18n-rtl/040/i18nrtl40.wgt
- ${TESTS_DIR}/i18n-rtl/044/i18nrtl44.wgt
- ${TESTS_DIR}/i18n-rtl/022/i18nrtl22.wgt
- ${TESTS_DIR}/i18n-rtl/002/i18nrtl02.wgt
- ${TESTS_DIR}/i18n-rtl/036/i18nrtl36.wgt
- ${TESTS_DIR}/i18n-rtl/035/i18nrtl35.wgt
- ${TESTS_DIR}/i18n-rtl/027/i18nrtl27.wgt
- ${TESTS_DIR}/i18n-rtl/028/i18nrtl28.wgt
- ${TESTS_DIR}/i18n-rtl/016/i18nrtl16.wgt
- ${TESTS_DIR}/i18n-rtl/013/i18nrtl13.wgt
- ${TESTS_DIR}/i18n-rtl/005/i18nrtl05.wgt
- ${TESTS_DIR}/i18n-rtl/038/i18nrtl38.wgt
- ${TESTS_DIR}/i18n-rtl/010/i18nrtl10.wgt
- ${TESTS_DIR}/i18n-rtl/020/i18nrtl20.wgt
- ${TESTS_DIR}/i18n-rtl/019/i18nrtl19.wgt
- ${TESTS_DIR}/i18n-rtl/041/i18nrtl41.wgt
- ${TESTS_DIR}/i18n-rtl/004/i18nrtl04.wgt
- ${TESTS_DIR}/i18n-rtl/014/i18nrtl14.wgt
- ${TESTS_DIR}/i18n-rtl/011/i18nrtl11.wgt
- ${TESTS_DIR}/i18n-rtl/001/i18nrtl01.wgt
- ${TESTS_DIR}/i18n-rtl/023/i18nrtl23.wgt
- ${TESTS_DIR}/i18n-rtl/039/i18nrtl39.wgt
- ${TESTS_DIR}/i18n-rtl/007/i18nrtl07.wgt
- ${TESTS_DIR}/i18n-rtl/003/i18nrtl03.wgt
- ${TESTS_DIR}/i18n-rtl/030/i18nrtl30.wgt
- ${TESTS_DIR}/i18n-rtl/008/i18nrtl08.wgt
- ${TESTS_DIR}/i18n-rtl/018/i18nrtl18.wgt
- ${TESTS_DIR}/i18n-rtl/009/i18nrtl09.wgt
- ${TESTS_DIR}/i18n-rtl/032/i18nrtl32.wgt
- ${TESTS_DIR}/i18n-rtl/034/i18nrtl34.wgt
- ${TESTS_DIR}/ta-ignore-unrequired-feature-with-invalid-name/000/gg.wgt
- ${TESTS_DIR}/ta-hkWmGJgfve/000/bq.wgt
- ${TESTS_DIR}/ta-hkWmGJgfve/002/bs.wgt
- ${TESTS_DIR}/ta-hkWmGJgfve/001/br.wgt
- ${TESTS_DIR}/ta-nYAcofihvj/006/ib.wgt
- ${TESTS_DIR}/ta-nYAcofihvj/000/iq.wgt
- ${TESTS_DIR}/ta-nYAcofihvj/002/iw.wgt
- ${TESTS_DIR}/ta-nYAcofihvj/005/it.wgt
- ${TESTS_DIR}/ta-nYAcofihvj/004/ir.wgt
- ${TESTS_DIR}/ta-nYAcofihvj/001/i9.wgt
- ${TESTS_DIR}/ta-nYAcofihvj/003/ie.wgt
- ${TESTS_DIR}/ta-its/012/its12.wgt
- ${TESTS_DIR}/ta-its/000/its0.wgt
- ${TESTS_DIR}/ta-its/015/its15.wgt
- ${TESTS_DIR}/ta-its/002/its2.wgt
- ${TESTS_DIR}/ta-its/013/its13.wgt
- ${TESTS_DIR}/ta-its/005/its5.wgt
- ${TESTS_DIR}/ta-its/010/its10.wgt
- ${TESTS_DIR}/ta-its/004/its4.wgt
- ${TESTS_DIR}/ta-its/014/its14.wgt
- ${TESTS_DIR}/ta-its/011/its11.wgt
- ${TESTS_DIR}/ta-its/001/its1.wgt
- ${TESTS_DIR}/ta-its/007/its7.wgt
- ${TESTS_DIR}/ta-its/003/its3.wgt
- ${TESTS_DIR}/ta-its/008/its8.wgt
- ${TESTS_DIR}/ta-its/009/its9.wgt
- ${TESTS_DIR}/ta-pIffQywZin/000/db.wgt
- ${TESTS_DIR}/ta-paIabGIIMC/000/dc.wgt
- ${TESTS_DIR}/ta-paIabGIIMC/001/dv.wgt
- ${TESTS_DIR}/ta-vcYJAPVEym/000/cu.wgt
- ${TESTS_DIR}/ta-vcYJAPVEym/002/ra.wgt
- ${TESTS_DIR}/ta-vcYJAPVEym/001/ci.wgt
- ${TESTS_DIR}/ta-vcYJAPVEym/003/co.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/006/bp.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/000/bj.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/002/bl.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/005/bo.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/004/bn.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/001/bk.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/007/ad.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/003/bm.wgt
- ${TESTS_DIR}/ta-FAFYMEGELU/008/ae.wgt
- ${TESTS_DIR}/ta-viewmodes/006/viewg.wgt
- ${TESTS_DIR}/ta-viewmodes/005/viewf.wgt
- ${TESTS_DIR}/ta-viewmodes/001/viewb.wgt
- ${TESTS_DIR}/ta-viewmodes/007/viewh.wgt
- ${TESTS_DIR}/ta-viewmodes/008/viewi.wgt
- ${TESTS_DIR}/ta-YUMJAPVEgI/000/cj.wgt
- ${TESTS_DIR}/ta-YUMJAPVEgI/002/cl.wgt
- ${TESTS_DIR}/ta-YUMJAPVEgI/004/cx.wgt
- ${TESTS_DIR}/ta-YUMJAPVEgI/001/ck.wgt
- ${TESTS_DIR}/ta-YUMJAPVEgI/003/cz.wgt
- ${TESTS_DIR}/ta-defaultlocale-ignore/000/ta-de-000.wgt
- ${TESTS_DIR}/ta-defaultlocale-ignore/002/ta-de-002.wgt
- ${TESTS_DIR}/ta-defaultlocale-ignore/004/ta-de-004.wgt
- ${TESTS_DIR}/ta-defaultlocale-ignore/001/ta-de-001.wgt
- ${TESTS_DIR}/ta-defaultlocale-ignore/003/ta-de-003.wgt
- ${TESTS_DIR}/i18n-rlo/017/i18nrlo17.wgt
- ${TESTS_DIR}/i18n-rlo/033/i18nrlo33.wgt
- ${TESTS_DIR}/i18n-rlo/006/i18nrlo06.wgt
- ${TESTS_DIR}/i18n-rlo/021/i18nrlo21.wgt
- ${TESTS_DIR}/i18n-rlo/037/i18nrlo37.wgt
- ${TESTS_DIR}/i18n-rlo/012/i18nrlo12.wgt
- ${TESTS_DIR}/i18n-rlo/031/i18nrlo31.wgt
- ${TESTS_DIR}/i18n-rlo/043/i18nrlo43.wgt
- ${TESTS_DIR}/i18n-rlo/015/i18nrlo15.wgt
- ${TESTS_DIR}/i18n-rlo/026/i18nrlo26.wgt
- ${TESTS_DIR}/i18n-rlo/029/i18nrlo29.wgt
- ${TESTS_DIR}/i18n-rlo/042/i18nrlo42.wgt
- ${TESTS_DIR}/i18n-rlo/040/i18nrlo40.wgt
- ${TESTS_DIR}/i18n-rlo/044/i18nrlo44.wgt
- ${TESTS_DIR}/i18n-rlo/022/i18nrlo22.wgt
- ${TESTS_DIR}/i18n-rlo/002/i18nrlo02.wgt
- ${TESTS_DIR}/i18n-rlo/036/i18nrlo36.wgt
- ${TESTS_DIR}/i18n-rlo/035/i18nrlo35.wgt
- ${TESTS_DIR}/i18n-rlo/027/i18nrlo27.wgt
- ${TESTS_DIR}/i18n-rlo/028/i18nrlo28.wgt
- ${TESTS_DIR}/i18n-rlo/016/i18nrlo16.wgt
- ${TESTS_DIR}/i18n-rlo/013/i18nrlo13.wgt
- ${TESTS_DIR}/i18n-rlo/005/i18nrlo05.wgt
- ${TESTS_DIR}/i18n-rlo/038/i18nrlo38.wgt
- ${TESTS_DIR}/i18n-rlo/010/i18nrlo10.wgt
- ${TESTS_DIR}/i18n-rlo/020/i18nrlo20.wgt
- ${TESTS_DIR}/i18n-rlo/019/i18nrlo19.wgt
- ${TESTS_DIR}/i18n-rlo/041/i18nrlo41.wgt
- ${TESTS_DIR}/i18n-rlo/004/i18nrlo04.wgt
- ${TESTS_DIR}/i18n-rlo/014/i18nrlo14.wgt
- ${TESTS_DIR}/i18n-rlo/011/i18nrlo11.wgt
- ${TESTS_DIR}/i18n-rlo/001/i18nrlo01.wgt
- ${TESTS_DIR}/i18n-rlo/023/i18nrlo23.wgt
- ${TESTS_DIR}/i18n-rlo/039/i18nrlo39.wgt
- ${TESTS_DIR}/i18n-rlo/007/i18nrlo07.wgt
- ${TESTS_DIR}/i18n-rlo/003/i18nrlo03.wgt
- ${TESTS_DIR}/i18n-rlo/030/i18nrlo30.wgt
- ${TESTS_DIR}/i18n-rlo/008/i18nrlo08.wgt
- ${TESTS_DIR}/i18n-rlo/018/i18nrlo18.wgt
- ${TESTS_DIR}/i18n-rlo/009/i18nrlo09.wgt
- ${TESTS_DIR}/i18n-rlo/032/i18nrlo32.wgt
- ${TESTS_DIR}/i18n-rlo/034/i18nrlo34.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/006/au.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/000/ao.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/002/aq.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/005/at.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/004/as.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/001/ap.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/007/av.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/003/ar.wgt
- ${TESTS_DIR}/ta-AYLMhryBnD/008/oa.wgt
- ${TESTS_DIR}/ta-aaaaaaaaaa/000/z1.wgt
- ${TESTS_DIR}/ta-aaaaaaaaaa/001/z2.wgt
- ${TESTS_DIR}/ta-UEMbyHERkI/000/c6.wgt
- ${TESTS_DIR}/ta-UEMbyHERkI/002/rb.wgt
- ${TESTS_DIR}/ta-UEMbyHERkI/001/c7.wgt
- ${TESTS_DIR}/ta-UEMbyHERkI/003/c8.wgt
- ${TESTS_DIR}/ta-dPOgiLQKNK/000/e4.wgt
- ${TESTS_DIR}/ta-dPOgiLQKNK/002/e6.wgt
- ${TESTS_DIR}/ta-dPOgiLQKNK/001/e5.wgt
- ${TESTS_DIR}/ta-dPOgiLQKNK/003/e7.wgt
- ${TESTS_DIR}/ta-CEGwkNQcWo/000/e2.wgt
- ${TESTS_DIR}/ta-CEGwkNQcWo/001/e3.wgt
- ${TESTS_DIR}/ta-vOBaOcWfll/000/e8.wgt
- ${TESTS_DIR}/ta-LQcjNKBLUZ/000/d9.wgt
- ${TESTS_DIR}/ta-LQcjNKBLUZ/001/d0.wgt
- ${TESTS_DIR}/ta-VdCEyDVSA/000/cp.wgt
- ${TESTS_DIR}/ta-VdCEyDVSA/002/cs.wgt
- ${TESTS_DIR}/ta-VdCEyDVSA/005/x2.wgt
- ${TESTS_DIR}/ta-VdCEyDVSA/004/x1.wgt
- ${TESTS_DIR}/ta-VdCEyDVSA/001/ca.wgt
- ${TESTS_DIR}/ta-VdCEyDVSA/003/cd.wgt
- ${TESTS_DIR}/ta-dxzVDWpaWg/000/bg.wgt
- ${TESTS_DIR}/ta-dxzVDWpaWg/001/bh.wgt
- ${TESTS_DIR}/ta-sdwhMozwIc/000/b7.wgt
- ${TESTS_DIR}/ta-sdwhMozwIc/002/b9.wgt
- ${TESTS_DIR}/ta-sdwhMozwIc/001/b8.wgt
- ${TESTS_DIR}/ta-BnWPqNvNVo/000/aw.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/006/c4.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/000/b3.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/002/b0.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/005/c3.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/004/c2.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/001/b4.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/007/c5.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/003/c1.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/008/cc.wgt
- ${TESTS_DIR}/ta-RGNHRBWNZV/009/cv.wgt
- ${TESTS_DIR}/ta-klLDaEgJeU/000/bt.wgt
- ${TESTS_DIR}/ta-klLDaEgJeU/002/bv.wgt
- ${TESTS_DIR}/ta-klLDaEgJeU/005/amp.wgt
- ${TESTS_DIR}/ta-klLDaEgJeU/004/lt.wgt
- ${TESTS_DIR}/ta-klLDaEgJeU/001/bu.wgt
- ${TESTS_DIR}/ta-klLDaEgJeU/003/bw.wgt
- ${TESTS_DIR}/ta-defaultlocale-usage/000/ta-de-000.wgt
- ${TESTS_DIR}/ta-defaultlocale-usage/001/dlocuse01.wgt
- ${TESTS_DIR}/ta-argMozRiC/006/al.wgt
- ${TESTS_DIR}/ta-argMozRiC/000/af.wgt
- ${TESTS_DIR}/ta-argMozRiC/002/ah.wgt
- ${TESTS_DIR}/ta-argMozRiC/005/ak.wgt
- ${TESTS_DIR}/ta-argMozRiC/004/aj.wgt
- ${TESTS_DIR}/ta-argMozRiC/001/ag.wgt
- ${TESTS_DIR}/ta-argMozRiC/007/am.wgt
- ${TESTS_DIR}/ta-argMozRiC/003/ai.wgt
- ${TESTS_DIR}/ta-argMozRiC/008/an.wgt
- ${TESTS_DIR}/i18n-ltr/017/i18nltr17.wgt
- ${TESTS_DIR}/i18n-ltr/033/i18nltr33.wgt
- ${TESTS_DIR}/i18n-ltr/006/i18nltr06.wgt
- ${TESTS_DIR}/i18n-ltr/021/i18nltr21.wgt
- ${TESTS_DIR}/i18n-ltr/037/i18nltr37.wgt
- ${TESTS_DIR}/i18n-ltr/012/i18nltr12.wgt
- ${TESTS_DIR}/i18n-ltr/031/i18nltr31.wgt
- ${TESTS_DIR}/i18n-ltr/043/i18nltr43.wgt
- ${TESTS_DIR}/i18n-ltr/015/i18nltr15.wgt
- ${TESTS_DIR}/i18n-ltr/026/i18nltr26.wgt
- ${TESTS_DIR}/i18n-ltr/029/i18nltr29.wgt
- ${TESTS_DIR}/i18n-ltr/042/i18nltr42.wgt
- ${TESTS_DIR}/i18n-ltr/040/i18nltr40.wgt
- ${TESTS_DIR}/i18n-ltr/044/i18nltr44.wgt
- ${TESTS_DIR}/i18n-ltr/022/i18nltr22.wgt
- ${TESTS_DIR}/i18n-ltr/002/i18nltr02.wgt
- ${TESTS_DIR}/i18n-ltr/036/i18nltr36.wgt
- ${TESTS_DIR}/i18n-ltr/035/i18nltr35.wgt
- ${TESTS_DIR}/i18n-ltr/027/i18nltr27.wgt
- ${TESTS_DIR}/i18n-ltr/028/i18nltr28.wgt
- ${TESTS_DIR}/i18n-ltr/016/i18nltr16.wgt
- ${TESTS_DIR}/i18n-ltr/013/i18nltr13.wgt
- ${TESTS_DIR}/i18n-ltr/005/i18nltr05.wgt
- ${TESTS_DIR}/i18n-ltr/038/i18nltr38.wgt
- ${TESTS_DIR}/i18n-ltr/010/i18nltr10.wgt
- ${TESTS_DIR}/i18n-ltr/020/i18nltr20.wgt
- ${TESTS_DIR}/i18n-ltr/019/i18nltr19.wgt
- ${TESTS_DIR}/i18n-ltr/041/i18nltr41.wgt
- ${TESTS_DIR}/i18n-ltr/004/i18nltr04.wgt
- ${TESTS_DIR}/i18n-ltr/014/i18nltr14.wgt
- ${TESTS_DIR}/i18n-ltr/011/i18nltr11.wgt
- ${TESTS_DIR}/i18n-ltr/001/i18nltr01.wgt
- ${TESTS_DIR}/i18n-ltr/023/i18nltr23.wgt
- ${TESTS_DIR}/i18n-ltr/039/i18nltr39.wgt
- ${TESTS_DIR}/i18n-ltr/007/i18nltr07.wgt
- ${TESTS_DIR}/i18n-ltr/003/i18nltr03.wgt
- ${TESTS_DIR}/i18n-ltr/030/i18nltr30.wgt
- ${TESTS_DIR}/i18n-ltr/008/i18nltr08.wgt
- ${TESTS_DIR}/i18n-ltr/018/i18nltr18.wgt
- ${TESTS_DIR}/i18n-ltr/009/i18nltr09.wgt
- ${TESTS_DIR}/i18n-ltr/032/i18nltr32.wgt
- ${TESTS_DIR}/i18n-ltr/034/i18nltr34.wgt
- ${TESTS_DIR}/ta-EGkPfzCBOz/000/dt.wgt
- ${TESTS_DIR}/ta-EGkPfzCBOz/002/v9.wgt
- ${TESTS_DIR}/ta-EGkPfzCBOz/001/dg.wgt
- ${TESTS_DIR}/ta-xlgUWUVzCY/000/d6.wgt
- ${TESTS_DIR}/ta-ZjcdAxFMSx/000/dq.wgt
- ${TESTS_DIR}/ta-ZjcdAxFMSx/002/hh.wgt
- ${TESTS_DIR}/ta-ZjcdAxFMSx/001/dw.wgt
- ${TESTS_DIR}/ta-xGYcVTMoAX/000/ds.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/006/bb.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/000/a5.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/002/a7.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/005/ba.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/010/bf.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/004/a9.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/001/a6.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/007/bc.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/003/a8.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/008/bd.wgt
- ${TESTS_DIR}/ta-DwhJBIJRQN/009/be.wgt
- ${TESTS_DIR}/ta-LYLMhryBBT/000/bx.wgt
- ${TESTS_DIR}/ta-LYLMhryBBT/002/bz.wgt
- ${TESTS_DIR}/ta-LYLMhryBBT/001/by.wgt
- ${TESTS_DIR}/ta-bbbbbbbbbb/000/xx.wgt
- ${TESTS_DIR}/ta-BxjoiWHaMr/006/a4.wgt
- ${TESTS_DIR}/ta-BxjoiWHaMr/000/ax.wgt
- ${TESTS_DIR}/ta-BxjoiWHaMr/002/az.wgt
- ${TESTS_DIR}/ta-BxjoiWHaMr/005/a3.wgt
- ${TESTS_DIR}/ta-BxjoiWHaMr/004/a2.wgt
- ${TESTS_DIR}/ta-BxjoiWHaMr/001/ay.wgt
- ${TESTS_DIR}/ta-BxjoiWHaMr/003/a1.wgt
- ${TESTS_DIR}/ta-RawAIWHoMs/000/b1.wgt
- ${TESTS_DIR}/ta-RawAIWHoMs/002/b2.wgt
- ${TESTS_DIR}/ta-RawAIWHoMs/001/rd.wgt
- ${TESTS_DIR}/ta-ACCJfDGwDQ/000/aa.wgt
- ${TESTS_DIR}/ta-ACCJfDGwDQ/002/ac.wgt
- ${TESTS_DIR}/ta-ACCJfDGwDQ/001/ab.wgt
- ${TESTS_DIR}/ta-eHUaPbgfKg/006/i4.wgt
- ${TESTS_DIR}/ta-eHUaPbgfKg/000/ix.wgt
- ${TESTS_DIR}/ta-eHUaPbgfKg/002/iz.wgt
- ${TESTS_DIR}/ta-eHUaPbgfKg/005/i3.wgt
- ${TESTS_DIR}/ta-eHUaPbgfKg/004/i2.wgt
- ${TESTS_DIR}/ta-eHUaPbgfKg/001/iy.wgt
- ${TESTS_DIR}/ta-eHUaPbgfKg/003/i1.wgt
- DESTINATION
- /opt/apps/widget/tests/w3c_widgets
- )
-
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#include "InstallerWrapper.h"
-
-#include <dpl/log/log.h>
-
-#include <cstdio>
-
-namespace
-{
-
-const DPL::String params = L"DPL_USE_OLD_STYLE_LOGS=0 "
- "DPL_USE_OLD_STYLE_PEDANTIC_LOGS=0 ";
-const DPL::String installCmd = params + L"wrt-installer -if ";
-const DPL::String uninstallCmd = params + L"wrt-installer -u ";
-
-}
-
-namespace InstallerWrapper
-{
-
-WidgetHandle install(const DPL::String& path)
-{
- DPL::String msg;
-
- auto cmd = installCmd + path;
- auto utf8 = DPL::ToUTF8String(cmd);
- LogDebug("executing: " << utf8);
- auto filehandle = popen(utf8.c_str(), "r");
- if (!filehandle) {
- return InstallerWrapper::OtherError;
- }
-
- char buffer[1024];
- int ret;
- while ((ret = fread_unlocked(buffer,
- sizeof(char),
- sizeof(buffer)/sizeof(char),
- filehandle)) > 0)
- {
- LogDebug("E:" << buffer);
- msg += DPL::FromASCIIString(buffer);
- }
- auto err = pclose(filehandle);
- if (!WIFEXITED(err)) {
- return OtherError;
- }
- if (0 != WEXITSTATUS(err)) {
- if (1 == WEXITSTATUS(err)) {
- return WrongWidgetPackage;
- }
- return OtherError;
- }
- WidgetHandle handle;
- auto nr = sscanf(DPL::ToUTF8String(msg).c_str(),
- "installed %d\n",
- &handle);
- if (1 != nr) {
- return OtherError;
- }
- return handle;
-}
-
-bool uninstall(WidgetHandle id)
-{
- char buffer[1024];
- sprintf(buffer, "%d", id);
- auto cmd = uninstallCmd + DPL::FromUTF8String(buffer) + L" > /dev/null";
- system(DPL::ToUTF8String(cmd).c_str());
- return true;
-}
-
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-#ifndef WRT_TESTS_W3C_TESTS_INSTALLER_WRAPPER_H
-#define WRT_TESTS_W3C_TESTS_INSTALLER_WRAPPER_H
-
-#include <dpl/string.h>
-
-namespace InstallerWrapper
-{
-
-typedef int WidgetHandle;
-const WidgetHandle WrongWidgetPackage = 1;
-const WidgetHandle OtherError = -1;
-
-WidgetHandle install(const DPL::String& path);
-bool uninstall(WidgetHandle id);
-
-}
-
-#endif//WRT_TESTS_W3C_TESTS_INSTALLER_WRAPPER_H
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include <dpl/test/test_runner.h>
-#include <W3CTestBase.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-
-#define LRE L"\x0202a"
-#define LRO L"\x0202d"
-#define RLE L"\x0202b"
-#define RLO L"\x0202e"
-#define PDF L"\x0202c"
-
-#define MakeInvalidTest(arg1, arg2) \
- RUNNER_TEST(arg1 ## _ ## arg2) \
-{ \
- W3CTestBase test(#arg2 ".wgt"); \
- test.StartTest(); \
- test.CheckIsNotValid(); \
-}
-
-RUNNER_TEST(ta_viewmodes_viewb)
-{
- W3CTestBase test("viewb.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(1);
- test.CheckWidgetWindowMode(L"floating");
-}
-
-RUNNER_TEST(ta_viewmodes_viewf)
-{
- W3CTestBase test("viewf.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(0);
-}
-
-RUNNER_TEST(ta_viewmodes_viewg)
-{
- W3CTestBase test("viewg.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(3);
- test.CheckWidgetWindowMode(L"windowed");
- test.CheckWidgetWindowMode(L"floating");
- test.CheckWidgetWindowMode(L"maximized");
-}
-
-RUNNER_TEST(ta_viewmodes_viewh)
-{
- W3CTestBase test("viewh.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(2);
- test.CheckWidgetWindowMode(L"windowed");
- test.CheckWidgetWindowMode(L"floating");
-}
-
-RUNNER_TEST(ta_viewmodes_viewi)
-{
- W3CTestBase test("viewi.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(0);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl01)
-{
- W3CTestBase test("i18nrtl01.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl02)
-{
- W3CTestBase test("i18nrtl02.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nrtl03)
-{
- W3CTestBase test("i18nrtl03.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrtl04)
-{
- W3CTestBase test("i18nrtl04.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrtl05)
-{
- W3CTestBase test("i18nrtl05.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl06)
-{
- W3CTestBase test("i18nrtl06.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- L"The arrow should point right " RLE L"<--" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nrtl07)
-{
- W3CTestBase test("i18nrtl07.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- L"The arrow should point right " RLE L"<--" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrtl08)
-{
- W3CTestBase test("i18nrtl08.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- L"The arrow should point right " RLE L"<--" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrtl09)
-{
- W3CTestBase test("i18nrtl09.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- L"The arrow should point right " RLE L"<--" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl10)
-{
- W3CTestBase test("i18nrtl10.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLE L"The arrow should point right " LRE L"-->" PDF PDF);
-}
-
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nrtl11)
-{
- W3CTestBase test("i18nrtl11.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- RLE L"The arrow should point right " LRE L"-->" PDF PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrtl12)
-{
- W3CTestBase test("i18nrtl12.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- RLE L"The arrow should point right " LRE L"-->" PDF PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrtl13)
-{
- W3CTestBase test("i18nrtl13.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- RLE L"The arrow should point right " LRE L"-->" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl14)
-{
- W3CTestBase test("i18nrtl14.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl15)
-{
- W3CTestBase test("i18nrtl15.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nrtl16)
-{
- W3CTestBase test("i18nrtl16.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrtl17)
-{
- W3CTestBase test("i18nrtl17.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrtl18)
-{
- W3CTestBase test("i18nrtl18.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl19)
-{
- W3CTestBase test("i18nrtl19.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLE L"<-- " LRE L"< PAS" PDF L"SED" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl20)
-{
- W3CTestBase test("i18nrtl20.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLE L"<-- " RLE L"PAS >" PDF L"SED" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl21)
-{
- W3CTestBase test("i18nrtl21.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLE LRO L"SED -->" PDF L"SAP >" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrtl22)
-{
- W3CTestBase test("i18nrtl22.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLE RLO L"<-- DES" PDF L"SAP >" PDF);
-}
-
-RUNNER_TEST(ta_roCaKRxZhS_i18nrtl23)
-{
- W3CTestBase test("i18nrtl23.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"test.png");
-}
-
-RUNNER_TEST(ta_LQcjNKBLUZ_i18nrtl26)
-{
- W3CTestBase test("i18nrtl26.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass.htm");
-}
-
-RUNNER_TEST(ta_paIabGIIMC_i18nrtl27)
-{
- W3CTestBase test("i18nrtl27.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("No way to verify content type");
-}
-
-RUNNER_TEST(ta_dPOgiLQKNK_i18nrtl28)
-{
- W3CTestBase test("i18nrtl28.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("No way to verify content encoding");
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_i18nrtl29)
-{
- W3CTestBase test("i18nrtl29.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_i18nrtl30)
-{
- W3CTestBase test("i18nrtl30.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:x-bugus-feature", false);
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_i18nrtl31)
-{
- W3CTestBase test("i18nrtl31.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1",
- L"The arrow should point right -->",
- L"TEST");
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_i18nrtl32)
-{
- W3CTestBase test("i18nrtl32.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1",
- L"TEST",
- L"The arrow should point right -->");
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nrtl33)
-{
- W3CTestBase test("i18nrtl33.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"The arrow should point right -->",
- L"TEST",
- false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nrtl34)
-{
- W3CTestBase test("i18nrtl34.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"TEST",
- L"The arrow should point right -->",
- false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nrtl35)
-{
- W3CTestBase test("i18nrtl35.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"TEST",
- L"TEST",
- true);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrtl36)
-{
- W3CTestBase test("i18nrtl36.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorHref(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrtl37)
-{
- W3CTestBase test("i18nrtl37.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorEmail(L"The arrow should point right -->");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrtl38)
-{
- W3CTestBase test("i18nrtl38.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicenseHref(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_i18nrtl39)
-{
- W3CTestBase test("i18nrtl39.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidth(123);
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_i18nrtl40)
-{
- W3CTestBase test("i18nrtl40.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeight(123);
-}
-
-RUNNER_TEST(ta_RawAIWHoMs_i18nrtl41)
-{
- W3CTestBase test("i18nrtl41.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetId(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_VerEfVGeTc_i18nrtl42)
-{
- W3CTestBase test("i18nrtl42.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetVersion(RLE L"<-- The arrow should point right" PDF);
-}
-
-RUNNER_TEST(ta_viewmodes_i18nrtl43)
-{
- W3CTestBase test("i18nrtl43.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(2);
- test.CheckWidgetWindowMode(L"floating");
- test.CheckWidgetWindowMode(L"windowed");
-}
-
-RUNNER_TEST(ta_klLDaEgJeU_i18nrtl44)
-{
- W3CTestBase test("i18nrtl44.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(RLE L"PASS" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo01)
-{
- W3CTestBase test("i18nrlo01.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo02)
-{
- W3CTestBase test("i18nrlo02.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nrlo03)
-{
- W3CTestBase test("i18nrlo03.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrlo04)
-{
- W3CTestBase test("i18nrlo04.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrlo05)
-{
- W3CTestBase test("i18nrlo05.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo06)
-{
- W3CTestBase test("i18nrlo06.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- L"P" RLO L"SA" PDF L"S" RLO L"DE" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nrlo07)
-{
- W3CTestBase test("i18nrlo07.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- L"P" RLO L"SA" PDF L"S" RLO L"DE" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrlo08)
-{
- W3CTestBase test("i18nrlo08.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- L"P" RLO L"SA" PDF L"S" RLO L"DE" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrlo09)
-{
- W3CTestBase test("i18nrlo09.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- L"P" RLO L"SA" PDF L"S" RLO L"DE" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo10)
-{
- W3CTestBase test("i18nrlo10.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLO RLO L"DE" PDF L"S" LRO L"AS" PDF L"P" PDF);
-}
-
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nrlo11)
-{
- W3CTestBase test("i18nrlo11.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- RLO RLO L"DE" PDF L"S" LRO L"AS" PDF L"P" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrlo12)
-{
- W3CTestBase test("i18nrlo12.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- RLO RLO L"DE" PDF L"S" LRO L"AS" PDF L"P" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrlo13)
-{
- W3CTestBase test("i18nrlo13.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- RLO RLO L"DE" PDF L"S" LRO L"AS" PDF L"P" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo14)
-{
- W3CTestBase test("i18nrlo14.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo15)
-{
- W3CTestBase test("i18nrlo15.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nrlo16)
-{
- W3CTestBase test("i18nrlo16.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrlo17)
-{
- W3CTestBase test("i18nrlo17.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrlo18)
-{
- W3CTestBase test("i18nrlo18.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo19)
-{
- W3CTestBase test("i18nrlo19.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLO L"<-- DES" LRE L"AS" PDF L"P >" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo20)
-{
- W3CTestBase test("i18nrlo20.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLO L"<-- DES" RLE L"AS" PDF L"P >" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo21)
-{
- W3CTestBase test("i18nrlo21.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLO L"<-- DES" LRO L"AS" PDF L"P >" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nrlo22)
-{
- W3CTestBase test("i18nrlo22.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- RLO L"<-- DES" RLO L"SA" PDF L"P >" PDF);
-}
-
-RUNNER_TEST(ta_roCaKRxZhS_i18nrlo23)
-{
- W3CTestBase test("i18nrlo23.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"test.png");
-}
-
-RUNNER_TEST(ta_LQcjNKBLUZ_i18nrlo26)
-{
- W3CTestBase test("i18nrlo26.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass.htm");
-}
-
-RUNNER_TEST(ta_paIabGIIMC_i18nrlo27)
-{
- W3CTestBase test("i18nrlo27.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("No way to verify content type");
-}
-
-RUNNER_TEST(ta_dPOgiLQKNK_i18nrlo28)
-{
- W3CTestBase test("i18nrlo28.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("No way to verify content encoding");
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_i18nrlo29)
-{
- W3CTestBase test("i18nrlo29.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_i18nrlo30)
-{
- W3CTestBase test("i18nrlo30.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:x-bugus-feature", false);
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_i18nrlo31)
-{
- W3CTestBase test("i18nrlo31.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1",
- L"PASSED",
- L"TEST");
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_i18nrlo32)
-{
- W3CTestBase test("i18nrlo32.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1",
- L"TEST",
- L"PASSED");
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nrlo33)
-{
- W3CTestBase test("i18nrlo33.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"PASSED",
- L"TEST",
- false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nrlo34)
-{
- W3CTestBase test("i18nrlo34.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"TEST",
- L"PASSED",
- false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nrlo35)
-{
- W3CTestBase test("i18nrlo35.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"TEST",
- L"TEST",
- true);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrlo36)
-{
- W3CTestBase test("i18nrlo36.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorHref(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nrlo37)
-{
- W3CTestBase test("i18nrlo37.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorEmail(L"PASSED");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nrlo38)
-{
- W3CTestBase test("i18nrlo38.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicenseHref(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_i18nrlo39)
-{
- W3CTestBase test("i18nrlo39.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidth(123);
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_i18nrlo40)
-{
- W3CTestBase test("i18nrlo40.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeight(123);
-}
-
-RUNNER_TEST(ta_RawAIWHoMs_i18nrlo41)
-{
- W3CTestBase test("i18nrlo41.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetId(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_VerEfVGeTc_i18nrlo42)
-{
- W3CTestBase test("i18nrlo42.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetVersion(RLO L"DESSAP" PDF);
-}
-
-RUNNER_TEST(ta_viewmodes_i18nrlo43)
-{
- W3CTestBase test("i18nrlo43.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(2);
- test.CheckWidgetWindowMode(L"floating");
- test.CheckWidgetWindowMode(L"windowed");
-}
-
-RUNNER_TEST(ta_klLDaEgJeU_i18nrlo44)
-{
- W3CTestBase test("i18nrlo44.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(RLO L"SSAP" PDF);
-}
-
-MakeInvalidTest(ta_ACCJfDGwDQ, aa)
-MakeInvalidTest(ta_ACCJfDGwDQ, ab)
-MakeInvalidTest(ta_ACCJfDGwDQ, ac)
-
-RUNNER_TEST(ta_argMozRiC_af)
-{
- W3CTestBase test("af.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"PASS");
-}
-
-RUNNER_TEST(ta_argMozRiC_ag)
-{
- W3CTestBase test("ag.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"P A S S");
-}
-
-RUNNER_TEST(ta_argMozRiC_ah)
-{
- W3CTestBase test("ah.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"PASS");
-}
-
-RUNNER_TEST(ta_argMozRiC_ai)
-{
- W3CTestBase test("ai.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorEmail(L"PASS");
-}
-
-RUNNER_TEST(ta_argMozRiC_aj)
-{
- W3CTestBase test("aj.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"PASS");
-}
-
-RUNNER_TEST(ta_argMozRiC_ak)
-{
- W3CTestBase test("ak.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"PASS");
-}
-
-RUNNER_TEST(ta_argMozRiC_al)
-{
- W3CTestBase test("al.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"");
-}
-
-RUNNER_TEST(ta_argMozRiC_am)
-{
- W3CTestBase test("am.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorHref(L"PASS:PASS");
-}
-
-RUNNER_TEST(ta_argMozRiC_an)
-{
- W3CTestBase test("an.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorHrefIsNull();
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_ao)
-{
- W3CTestBase test("ao.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetNameIsNotNull();
- test.CheckWidgetName(L"PASS");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_ap)
-{
- W3CTestBase test("ap.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetNameIsNotNull();
- test.CheckWidgetName(L"P A S S");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_aq)
-{
- W3CTestBase test("aq.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetNameIsNotNull();
- test.CheckWidgetName(L"PASS");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_ar)
-{
- W3CTestBase test("ar.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(L"PASS");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_as)
-{
- W3CTestBase test("as.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(L"PASS");
- test.CheckWidgetShortName(L"PASS");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_at)
-{
- W3CTestBase test("at.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(L"PASS");
- test.CheckWidgetShortName(L"PASS");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_au)
-{
- W3CTestBase test("au.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(L"");
-}
-
-
-RUNNER_TEST(ta_AYLMhryBnD_av)
-{
- W3CTestBase test("av.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(L"");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_oa)
-{
- W3CTestBase test("oa.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(L"PASS");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr01)
-{
- W3CTestBase test("i18nltr01.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr02)
-{
- W3CTestBase test("i18nltr02.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nltr03)
-{
- W3CTestBase test("i18nltr03.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nltr04)
-{
- W3CTestBase test("i18nltr04.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nltr05)
-{
- W3CTestBase test("i18nltr05.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr06)
-{
- W3CTestBase test("i18nltr06.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(L"The arrow should point right " LRE L"-->" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nltr07)
-{
- W3CTestBase test("i18nltr07.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- L"The arrow should point right " LRE L"-->" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nltr08)
-{
- W3CTestBase test("i18nltr08.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- L"The arrow should point right " LRE L"-->" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nltr09)
-{
- W3CTestBase test("i18nltr09.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- L"The arrow should point right " LRE L"-->" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr10)
-{
- W3CTestBase test("i18nltr10.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- LRE L"The arrow should point right " RLE L"<--" PDF PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nltr11)
-{
- W3CTestBase test("i18nltr11.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- LRE L"The arrow should point right " RLE L"<--" PDF PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nltr12)
-{
- W3CTestBase test("i18nltr12.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- LRE L"The arrow should point right " RLE L"<--" PDF PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nltr13)
-{
- W3CTestBase test("i18nltr13.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- LRE L"The arrow should point right " RLE L"<--" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr14)
-{
- W3CTestBase test("i18nltr14.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr15)
-{
- W3CTestBase test("i18nltr15.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(
- LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nltr16)
-{
- W3CTestBase test("i18nltr16.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nltr17)
-{
- W3CTestBase test("i18nltr17.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nltr18)
-{
- W3CTestBase test("i18nltr18.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr19)
-{
- W3CTestBase test("i18nltr19.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- LRE L"< PAS" LRE L"SED -->" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr20)
-{
- W3CTestBase test("i18nltr20.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- LRE L"< PAS" RLE L"<-- SED" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr21)
-{
- W3CTestBase test("i18nltr21.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- LRE L"< PAS" LRO L"SED -->" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nltr22)
-{
- W3CTestBase test("i18nltr22.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- LRE L"< PAS" RLO L"<-- DES" PDF PDF);
-}
-
-RUNNER_TEST(ta_roCaKRxZhS_i18nltr23)
-{
- W3CTestBase test("i18nltr23.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"test.png");
-}
-
-RUNNER_TEST(ta_LQcjNKBLUZ_i18nltr26)
-{
- W3CTestBase test("i18nltr26.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass.htm");
-}
-
-RUNNER_TEST(ta_paIabGIIMC_i18nltr27)
-{
- W3CTestBase test("i18nltr27.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("No way to verify content type");
-}
-
-RUNNER_TEST(ta_dPOgiLQKNK_i18nltr28)
-{
- W3CTestBase test("i18nltr28.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("No way to verify content encoding");
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_i18nltr29)
-{
- W3CTestBase test("i18nltr29.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_i18nltr30)
-{
- W3CTestBase test("i18nltr30.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:x-bugus-feature", false);
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_i18nltr31)
-{
- W3CTestBase test("i18nltr31.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1",
- L"The arrow should point right -->",
- L"TEST");
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_i18nltr32)
-{
- W3CTestBase test("i18nltr32.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1",
- L"TEST",
- L"The arrow should point right -->");
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nltr33)
-{
- W3CTestBase test("i18nltr33.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"The arrow should point right -->",
- L"TEST",
- false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nltr34)
-{
- W3CTestBase test("i18nltr34.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"TEST",
- L"The arrow should point right -->",
- false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nltr35)
-{
- W3CTestBase test("i18nltr35.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"TEST",
- L"TEST",
- true);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nltr36)
-{
- W3CTestBase test("i18nltr36.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorHref(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nltr37)
-{
- W3CTestBase test("i18nltr37.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorEmail(L"The arrow should point right -->");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nltr38)
-{
- W3CTestBase test("i18nltr38.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicenseHref(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_i18nltr39)
-{
- W3CTestBase test("i18nltr39.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidth(123);
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_i18nltr40)
-{
- W3CTestBase test("i18nltr40.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeight(123);
-}
-
-RUNNER_TEST(ta_RawAIWHoMs_i18nltr41)
-{
- W3CTestBase test("i18nltr41.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetId(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_VerEfVGeTc_i18nltr42)
-{
- W3CTestBase test("i18nltr42.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetVersion(LRE L"The arrow should point right -->" PDF);
-}
-
-RUNNER_TEST(ta_viewmodes_i18nltr43)
-{
- W3CTestBase test("i18nltr43.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(2);
- test.CheckWidgetWindowMode(L"floating");
- test.CheckWidgetWindowMode(L"windowed");
-}
-
-RUNNER_TEST(ta_klLDaEgJeU_i18nltr44)
-{
- W3CTestBase test("i18nltr44.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(LRE L"PASS" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro01)
-{
- W3CTestBase test("i18nlro01.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro02)
-{
- W3CTestBase test("i18nlro02.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(
- LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nlro03)
-{
- W3CTestBase test("i18nlro03.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nlro04)
-{
- W3CTestBase test("i18nlro04.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nlro05)
-{
- W3CTestBase test("i18nlro05.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro06)
-{
- W3CTestBase test("i18nlro06.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- L"םפל" LRO L"חל" PDF L"ק");
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nlro07)
-{
- W3CTestBase test("i18nlro07.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- L"םפל" LRO L"חל" PDF L"ק");
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nlro08)
-{
- W3CTestBase test("i18nlro08.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- L"םפל" LRO L"חל" PDF L"ק");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nlro09)
-{
- W3CTestBase test("i18nlro09.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- L"םפל" LRO L"חל" PDF L"ק");
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro10)
-{
- W3CTestBase test("i18nlro10.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(
- LRO LRO L"קח" PDF L"לל" RLO L"םפ" PDF PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nlro11)
-{
- W3CTestBase test("i18nlro11.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(
- LRO LRO L"קח" PDF L"לל" RLO L"םפ" PDF PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nlro12)
-{
- W3CTestBase test("i18nlro12.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- LRO LRO L"קח" PDF L"לל" RLO L"םפ" PDF PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nlro13)
-{
- W3CTestBase test("i18nlro13.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- LRO LRO L"קח" PDF L"לל" RLO L"םפ" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro14)
-{
- W3CTestBase test("i18nlro14.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro15)
-{
- W3CTestBase test("i18nlro15.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetShortName(LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_i18nlro16)
-{
- W3CTestBase test("i18nlro16.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nlro17)
-{
- W3CTestBase test("i18nlro17.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(
- LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nlro18)
-{
- W3CTestBase test("i18nlro18.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(
- LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro19)
-{
- W3CTestBase test("i18nlro19.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(LRO L"< PAS" LRE L"SED -->" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro20)
-{
- W3CTestBase test("i18nlro20.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(LRO L"< PAS" RLE L"<-- DES" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro21)
-{
- W3CTestBase test("i18nlro21.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(LRO L"< PAS" LRO L"SED -->" PDF PDF);
-}
-
-RUNNER_TEST(ta_AYLMhryBnD_i18nlro22)
-{
- W3CTestBase test("i18nlro22.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(LRO L"< PAS" RLO L"<-- DES" PDF PDF);
-}
-
-RUNNER_TEST(ta_roCaKRxZhS_i18nlro23)
-{
- W3CTestBase test("i18nlro23.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"test.png");
-}
-
-RUNNER_TEST(ta_LQcjNKBLUZ_i18nlro26)
-{
- W3CTestBase test("i18nlro26.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass.htm");
-}
-
-RUNNER_TEST(ta_paIabGIIMC_i18nlro27)
-{
- W3CTestBase test("i18nlro27.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("No way to verify content type");
-}
-
-RUNNER_TEST(ta_dPOgiLQKNK_i18nlro28)
-{
- W3CTestBase test("i18nlro28.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("No way to verify content encoding");
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_i18nlro29)
-{
- W3CTestBase test("i18nlro29.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_i18nlro30)
-{
- W3CTestBase test("i18nlro30.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:x-bugus-feature", false);
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_i18nlro31)
-{
- W3CTestBase test("i18nlro31.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1",
- L"םפללחק",
- L"TEST");
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_i18nlro32)
-{
- W3CTestBase test("i18nlro32.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1",
- L"TEST",
- L"םפללחק");
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nlro33)
-{
- W3CTestBase test("i18nlro33.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"םפללחק",
- L"TEST",
- false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nlro34)
-{
- W3CTestBase test("i18nlro34.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"TEST",
- L"םפללחק",
- false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_i18nlro35)
-{
- W3CTestBase test("i18nlro35.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"TEST",
- L"TEST",
- true);
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nlro36)
-{
- W3CTestBase test("i18nlro36.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorHref(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_argMozRiC_i18nlro37)
-{
- W3CTestBase test("i18nlro37.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorEmail(L"םפללחק");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_i18nlro38)
-{
- W3CTestBase test("i18nlro38.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicenseHref(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_i18nlro39)
-{
- W3CTestBase test("i18nlro39.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidth(123);
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_i18nlro40)
-{
- W3CTestBase test("i18nlro40.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeight(123);
-}
-
-RUNNER_TEST(ta_RawAIWHoMs_i18nlro41)
-{
- W3CTestBase test("i18nlro41.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetId(L"http://widget.example.org/");
-}
-
-RUNNER_TEST(ta_VerEfVGeTc_i18nlro42)
-{
- W3CTestBase test("i18nlro42.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetVersion(LRO L"קחללפם" PDF);
-}
-
-RUNNER_TEST(ta_viewmodes_i18nlro43)
-{
- W3CTestBase test("i18nlro43.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWindowModesCount(2);
- test.CheckWidgetWindowMode(L"floating");
- test.CheckWidgetWindowMode(L"windowed");
-}
-
-RUNNER_TEST(ta_klLDaEgJeU_i18nlro44)
-{
- W3CTestBase test("i18nlro44.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(LRO L"PASS" PDF);
-}
-
-RUNNER_TEST(ta_BnWPqNvNVo_aw)
-{
- W3CTestBase test("aw.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass.html");
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_ax)
-{
- W3CTestBase test("ax.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeight(123);
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_ay)
-{
- W3CTestBase test("ay.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeightIsNull();
-// RUNNER_TODO_MSG("Cannot check if user agent ignored the height value");
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_az)
-{
- W3CTestBase test("az.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeight(100);
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_a1)
-{
- W3CTestBase test("a1.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeight(123);
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_a2)
-{
- W3CTestBase test("a2.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeightIsNull();
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_a3)
-{
- W3CTestBase test("a3.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeightIsNull();
-}
-
-RUNNER_TEST(ta_BxjoiWHaMr_a4)
-{
- W3CTestBase test("a4.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetHeightIsNull();
-// RUNNER_TODO_MSG("Cannot check if user agent ignored the height value");
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_a5)
-{
- W3CTestBase test("a5.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreferenceListLength(0);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_a6)
-{
- W3CTestBase test("a6.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreferenceListLength(1);
- test.CheckWidgetPreference(L"PASS", L"PASS", false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_a7)
-{
- W3CTestBase test("a7.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreferenceListLength(1);
- test.CheckWidgetPreference(L"PASS", L"PASS", false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_a8)
-{
- W3CTestBase test("a8.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreferenceListLength(1);
- test.CheckWidgetPreference(L"PASS", L"PASS", true);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_a9)
-{
- W3CTestBase test("a9.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreferenceListLength(1);
- test.CheckWidgetPreference(L"PASS", L"PASS", false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_ba)
-{
- W3CTestBase test("ba.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreferenceListLength(1);
- test.CheckWidgetPreference(L"a", L"a", false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_bb)
-{
- W3CTestBase test("bb.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreferenceListLength(2);
- test.CheckWidgetPreference(L"a", L"a", false);
- test.CheckWidgetPreference(L"A", L"b", false);
-}
-
-RUNNER_TEST(ta_DwhJBIJRQN_bc)
-{
- W3CTestBase test("bc.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetPreference(L"PASS", L"PASS", false);
-}
-
-MakeInvalidTest(ta_dxzVDWpaWg, bg)
-MakeInvalidTest(ta_dxzVDWpaWg, bh)
-
-RUNNER_TEST(ta_FAFYMEGELU_bj)
-{
- W3CTestBase test("bj.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"icon.png");
-}
-
-RUNNER_TEST(ta_FAFYMEGELU_bk)
-{
- W3CTestBase test("bk.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"locales/en/icon.png");
-}
-
-RUNNER_TEST(ta_FAFYMEGELU_bl)
-{
- W3CTestBase test("bl.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"locales/en/icon.jpg");
- test.CheckWidgetIcon(L"icon.png");
-}
-
-RUNNER_TEST(ta_FAFYMEGELU_bm)
-{
- W3CTestBase test("bm.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"locales/en/icon.jpg");
- test.CheckWidgetIcon(L"icon.png");
-}
-
-RUNNER_TEST(ta_FAFYMEGELU_bn)
-{
- W3CTestBase test("bn.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"locales/en/icon.png");
- test.CheckWidgetIcon(L"icons/pass.png");
-}
-
-RUNNER_TEST(ta_FAFYMEGELU_bo)
-{
- W3CTestBase test("bo.wgt");
- test.StartTest();
- test.CheckIsValid();
- int first = test.CheckWidgetIcon(L"icon.png");
- int second = test.CheckWidgetIcon(L"icon.jpg");
- RUNNER_ASSERT_MSG(second - first == 1, "Widget Icons list order mismatch");
-}
-
-RUNNER_TEST(ta_FAFYMEGELU_bp)
-{
- W3CTestBase test("bp.wgt");
- test.StartTest();
- test.CheckIsValid();
- int first = test.CheckWidgetIcon(L"icon.png");
- int second = test.CheckWidgetIcon(L"locales/en/icon.jpg");
- RUNNER_ASSERT_MSG(second - first == 1, "Widget Icons list order mismatch");
-}
-
-RUNNER_TEST(ta_FAFYMEGELU_ad)
-{
- W3CTestBase test("ad.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"icon.png");
-}
-
-RUNNER_TEST(ta_FAFYMEGELU_ae)
-{
- W3CTestBase test("ae.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"locales/en/icon.png");
-}
-
-RUNNER_TEST(ta_hkWmGJgfve_bq)
-{
- W3CTestBase test("bq.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass.html");
-}
-
-MakeInvalidTest(ta_hkWmGJgfve, br)
-
-RUNNER_TEST(ta_hkWmGJgfve_bs)
-{
- W3CTestBase test("bs.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass.html");
-}
-
-MakeInvalidTest(ta_klLDaEgJeU, bt)
-MakeInvalidTest(ta_klLDaEgJeU, bu)
-
-RUNNER_TEST(ta_klLDaEgJeU_bv)
-{
- W3CTestBase test("bv.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass&.html");
-}
-
-RUNNER_TEST(ta_klLDaEgJeU_bw)
-{
- W3CTestBase test("bw.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"PASS");
-}
-
-MakeInvalidTest(ta_klLDaEgJeU, lt)
-MakeInvalidTest(ta_klLDaEgJeU, amp)
-
-RUNNER_TEST(ta_LYLMhryBBT_bx)
-{
- W3CTestBase test("bx.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(L"PASS");
-}
-
-RUNNER_TEST(ta_LYLMhryBBT_by)
-{
- W3CTestBase test("by.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(L"");
-}
-
-RUNNER_TEST(ta_LYLMhryBBT_bz)
-{
- W3CTestBase test("bz.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetName(L"PASS");
-}
-
-RUNNER_TEST(ta_RawAIWHoMs_b1)
-{
- W3CTestBase test("b1.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetId(L"pass:");
-}
-
-RUNNER_TEST(ta_RawAIWHoMs_rd)
-{
- W3CTestBase test("rd.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIdIsNull();
-}
-
-RUNNER_TEST(ta_RawAIWHoMs_b2)
-{
- W3CTestBase test("b2.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetId(L"pass:");
-}
-
-RUNNER_TEST(ta_RGNHRBWNZV_cc)
-{
- W3CTestBase test("cc.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-RUNNER_TEST(ta_RGNHRBWNZV_cv)
-{
- W3CTestBase test("cv.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.html");
-}
-
-RUNNER_TEST(ta_RGNHRBWNZV_b3)
-{
- W3CTestBase test("b3.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
- test.CheckWidgetStartFileType(L"text/html");
-}
-
-RUNNER_TEST(ta_RGNHRBWNZV_b4)
-{
- W3CTestBase test("b4.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.html");
- test.CheckWidgetStartFileType(L"text/html");
-}
-
-MakeInvalidTest(ta_RGNHRBWNZV, b0)
-MakeInvalidTest(ta_RGNHRBWNZV, c1)
-MakeInvalidTest(ta_RGNHRBWNZV, c2)
-MakeInvalidTest(ta_RGNHRBWNZV, c3)
-
-RUNNER_TEST(ta_RGNHRBWNZV_c4)
-{
- W3CTestBase test("c4.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"INdeX.htm", true);
- test.CheckWidgetStartFile(L"index.html");
-}
-
-RUNNER_TEST(ta_RGNHRBWNZV_c5)
-{
- W3CTestBase test("c5.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"INdeX.htm", true);
- test.CheckWidgetStartFile(L"index.html");
-}
-
-MakeInvalidTest(ta_RRZxvvTFHx, b5)
-
-RUNNER_TEST(ta_RRZxvvTFHx_b6)
-{
- W3CTestBase test("b6.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.html");
-}
-
-RUNNER_TEST(ta_sdwhMozwIc_b7)
-{
- W3CTestBase test("b7.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"PASS");
- test.CheckAuthorHref(L"PASS:");
- test.CheckAuthorEmail(L"PASS");
-}
-
-RUNNER_TEST(ta_sdwhMozwIc_b8)
-{
- W3CTestBase test("b8.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"");
-}
-
-RUNNER_TEST(ta_sdwhMozwIc_b9)
-{
- W3CTestBase test("b9.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckAuthorName(L"PASS");
- test.CheckAuthorHref(L"PASS:");
- test.CheckAuthorEmail(L"PASS");
-}
-
-RUNNER_TEST(ta_UEMbyHERkI_c6)
-{
- W3CTestBase test("c6.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"PASS");
-}
-
-RUNNER_TEST(ta_UEMbyHERkI_c7)
-{
- W3CTestBase test("c7.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"");
-}
-
-RUNNER_TEST(ta_UEMbyHERkI_rb)
-{
- W3CTestBase test("rb.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"PASS");
-}
-
-RUNNER_TEST(ta_UEMbyHERkI_c8)
-{
- W3CTestBase test("c8.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"PASS");
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_c9)
-{
- W3CTestBase test("c9.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidthIsNull();
-// RUNNER_TODO_MSG("Cannot check if user agent ignored the width value");
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_cq)
-{
- W3CTestBase test("cq.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidth(123);
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_cw)
-{
- W3CTestBase test("cw.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidth(200);
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_ce)
-{
- W3CTestBase test("ce.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidth(123);
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_cr)
-{
- W3CTestBase test("cr.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidthIsNull();
-// RUNNER_TODO_MSG("Cannot check if width is Null");
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_ct)
-{
- W3CTestBase test("ct.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidthIsNull();
-// RUNNER_TODO_MSG("Cannot check if width is Null");
-}
-
-RUNNER_TEST(ta_UScJfQHPPy_cy)
-{
- W3CTestBase test("cy.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetWidthIsNull();
-// RUNNER_TODO_MSG("Cannot check if user agent ignored the width value");
-}
-
-RUNNER_TEST(ta_vcYJAPVEym_cu)
-{
- W3CTestBase test("cu.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"PASS");
- test.CheckWidgetLicenseHref(L"PASS:");
-}
-
-RUNNER_TEST(ta_vcYJAPVEym_ci)
-{
- W3CTestBase test("ci.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"");
- test.CheckWidgetLicenseHrefIsNull();
-}
-
-RUNNER_TEST(ta_vcYJAPVEym_ra)
-{
- W3CTestBase test("ra.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"PASS");
-}
-
-RUNNER_TEST(ta_vcYJAPVEym_co)
-{
- W3CTestBase test("co.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"PASS");
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_cp)
-{
- W3CTestBase test("cp.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"PASS");
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_ca)
-{
- W3CTestBase test("ca.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"PASS");
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_cs)
-{
- W3CTestBase test("cs.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"");
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_cd)
-{
- W3CTestBase test("cd.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"\n\tP\n\tA\n\tS\n\tS\n");
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_x1)
-{
- W3CTestBase test("x1.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"PASS");
-}
-
-RUNNER_TEST(ta_VdCEyDVSA_x2)
-{
- W3CTestBase test("x2.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetDescription(L"PASS");
-}
-
-RUNNER_TEST(ta_VerEfVGeTc_cf)
-{
- W3CTestBase test("cf.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetVersion(L"PASS");
-}
-
-RUNNER_TEST(ta_VerEfVGeTc_cg)
-{
- W3CTestBase test("cg.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetVersion(L"");
-}
-
-RUNNER_TEST(ta_VerEfVGeTc_ch)
-{
- W3CTestBase test("ch.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetVersion(L"PASS");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_cj)
-{
- W3CTestBase test("cj.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"PASS");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_ck)
-{
- W3CTestBase test("ck.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"PASS");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_cl)
-{
- W3CTestBase test("cl.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_cz)
-{
- W3CTestBase test("cz.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"\n\tP\n\tA\n\tS\n\tS\n");
-}
-
-RUNNER_TEST(ta_YUMJAPVEgI_cx)
-{
- W3CTestBase test("cx.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLicense(L"");
- test.CheckWidgetLicenseHref(L"test/pass.html");
-}
-
-RUNNER_TEST(ta_iipTwNshRg_d1)
-{
- W3CTestBase test("d1.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconListLength(1);
- test.CheckWidgetIcon(L"icon.png");
-}
-
-RUNNER_TEST(ta_iipTwNshRg_ga)
-{
- W3CTestBase test("ga.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconListLength(1);
- test.CheckWidgetIcon(L"icon.png");
-}
-
-RUNNER_TEST(ta_roCaKRxZhS_d2)
-{
- W3CTestBase test("d2.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconListLength(1);
- test.CheckWidgetIcon(L"icon.png");
-}
-
-RUNNER_TEST(ta_MFcsScFEaC_d3)
-{
- W3CTestBase test("d3.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-MakeInvalidTest(ta_paWbGHyVrG, d4)
-
-RUNNER_TEST(ta_luyKMFABLX_d5)
-{
- W3CTestBase test("d5.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeatureListLength(0);
-}
-
-RUNNER_TEST(ta_xlgUWUVzCY_d6)
-{
- W3CTestBase test("d6.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParamListLength(L"feature:a9bb79c1", 0);
-}
-
-RUNNER_TEST(ta_LTUJGJFCOU_d7)
-{
- W3CTestBase test("d7.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-RUNNER_TEST(ta_LTUJGJFCOU_d8)
-{
- W3CTestBase test("d8.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-RUNNER_TEST(ta_LTUJGJFCOU_gb)
-{
- W3CTestBase test("gb.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-MakeInvalidTest(ta_LQcjNKBLUZ, d9)
-
-RUNNER_TEST(ta_LQcjNKBLUZ_d0)
-{
- W3CTestBase test("d0.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-MakeInvalidTest(ta_ZjcdAxFMSx, dq)
-MakeInvalidTest(ta_ZjcdAxFMSx, dw)
-
-//RUNNER_TEST(ta_xGYcVTMoAX_ds)
-//{
-// W3CTestBase test("ds.wgt");
-// test.StartTest();
-// test.CheckIsValid();
-// test.CheckAuthorEmailIsNull();
-// test.CheckAuthorHrefIsNull();
-// test.CheckAuthorNameIsNull();
-// test.CheckWidgetFeatureListLength(0);
-// test.CheckWidgetIconListLength(0);
-// test.CheckWidgetStartFileEncoding(L"UTF-8");
-// test.CheckWidgetStartFileType(L"text/html");
-// //(widget config doc must be 'config.xml' at the root of the widget package)
-// //This is implicitly tested by test.CheckIsValid().
-// test.CheckWidgetDescriptionIsNull();
-// test.CheckWidgetHeightIsNull();
-// test.CheckWidgetIdIsNull();
-// test.CheckWidgetLicenseIsNull();
-// test.CheckWidgetLicenseHrefIsNull();
-// //(test.CheckWidgetLicence file is null)
-// //This is implicitly tested by above, we don't store the licence file in DB
-// test.CheckWidgetNameIsNull();
-// test.CheckWidgetPreferenceListLength(0);
-// test.CheckWidgetShortNameIsNull();
-// test.CheckWidgetVersionIsNull();
-// test.CheckWidgetWidthIsNull();
-// test.CheckWidgetWindowModesCount(0);
-// test.CheckWidgetStartFile(L"index.htm", false);
-// //(user agent locales must contain at least one item whose value is 'en')
-// //There seems to be no support for this, TODO for Piotr M?
-//}
-
-RUNNER_TEST(ta_paIabGIIMC_dc)
-{
- W3CTestBase test("dc.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.php");
- test.CheckWidgetStartFileType(L"text/html");
-}
-
-MakeInvalidTest(ta_paIabGIIMC, dv)
-
-RUNNER_TEST(ta_rZdcMBExBX_df)
-{
- W3CTestBase test("df.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeatureListLength(0);
-}
-
-RUNNER_TEST(ta_rZdcMBExBX_ha)
-{
- W3CTestBase test("ha.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeatureListLength(2);
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1", L"test", L"pass1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1", L"test", L"pass2");
-}
-
-RUNNER_TEST(ta_EGkPfzCBOz_dt)
-{
- W3CTestBase test("dt.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeatureListLength(1);
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParamListLength(L"feature:a9bb79c1", 0);
-}
-
-RUNNER_TEST(ta_EGkPfzCBOz_dg)
-{
- W3CTestBase test("dg.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeatureListLength(1);
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParamListLength(L"feature:a9bb79c1", 1);
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1", L"PASS", L"PASS");
-}
-
-RUNNER_TEST(ta_EGkPfzCBOz_v9)
-{
- W3CTestBase test("v9.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeatureListLength(1);
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParamListLength(L"feature:a9bb79c1", 2);
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1", L"PASS", L"value1");
- test.CheckWidgetFeatureParam(L"feature:a9bb79c1", L"PASS", L"value2");
-}
-
-RUNNER_TEST(ta_pIffQywZin_db)
-{
- W3CTestBase test("db.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-RUNNER_TEST(ta_FDGQBROtzW_dn)
-{
- W3CTestBase test("dn.test");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-RUNNER_TEST(ta_FDGQBROtzW_dm)
-{
- W3CTestBase test("dm");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"index.htm");
-}
-
-MakeInvalidTest(ta_qxLSCRCHlN, dk)
-MakeInvalidTest(ta_uLHyIMvLwz, dl)
-
-RUNNER_TEST(ta_uLHyIMvLwz_do)
-{
- W3CTestBase test("split.wgt.001");
- test.StartTest();
- test.CheckIsNotValid();
-}
-
-MakeInvalidTest(ta_uLHyIMvLwz, dp)
-
-RUNNER_TEST(ta_KNiLPOKdgQ_e1)
-{
- W3CTestBase test("e1.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParamListLength(L"feature:a9bb79c1", 0);
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_e2)
-{
- W3CTestBase test("e2.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParamListLength(L"feature:a9bb79c1", 0);
-}
-
-RUNNER_TEST(ta_CEGwkNQcWo_e3)
-{
- W3CTestBase test("e3.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeature(L"feature:a9bb79c1");
- test.CheckWidgetFeatureParamListLength(L"feature:a9bb79c1", 0);
-}
-
-RUNNER_TEST(ta_dPOgiLQKNK_e4)
-{
- W3CTestBase test("e4.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFileEncoding(L"UTF-8");
-}
-
-RUNNER_TEST(ta_dPOgiLQKNK_e5)
-{
- W3CTestBase test("e5.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFileEncoding(L"ISO-8859-1");
-}
-
-RUNNER_TEST(ta_dPOgiLQKNK_e6)
-{
- W3CTestBase test("e6.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFileEncoding(L"ISO-8859-1");
-}
-
-RUNNER_TEST(ta_dPOgiLQKNK_e7)
-{
- W3CTestBase test("e7.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFileEncoding(L"UTF-8");
-}
-
-MakeInvalidTest(ta_vOBaOcWfll, e8)
-
-RUNNER_TEST(ta_bbbbbbbbbb_xx)
-{
- W3CTestBase test("xx.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFile(L"pass.html");
-}
-
-RUNNER_TEST(ta_iuJHnskSHq_zz)
-{
- W3CTestBase test("zz.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconListLength(0);
-}
-
-RUNNER_TEST(ta_iuJHnskSHq_za)
-{
- W3CTestBase test("za.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconListLength(1);
- test.CheckWidgetIcon(L"pass.png");
-}
-
-RUNNER_TEST(ta_iuJHnskSHq_zb)
-{
- W3CTestBase test("zb.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconListLength(1);
- test.CheckWidgetIcon(L"locales/en/icon.png");
- test.CheckWidgetIconWidthAndHeightAreNull(L"locales/en/icon.png");
-}
-
-RUNNER_TEST(ta_iuJHnskSHq_zc)
-{
- W3CTestBase test("zc.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconListLength(1);
- test.CheckWidgetIcon(L"locales/en/custom.png");
- test.CheckWidgetIconWidthAndHeightAreNull(L"locales/en/custom.png");
-}
-
-RUNNER_TEST(ta_eHUaPbgfKg_ix)
-{
- W3CTestBase test("ix.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconHeight(L"icon/icon.png", 123);
-}
-
-RUNNER_TEST(ta_eHUaPbgfKg_iy)
-{
- W3CTestBase test("iy.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconHeightIsNull(L"icon/icon.png");
-}
-
-RUNNER_TEST(ta_eHUaPbgfKg_iz)
-{
- W3CTestBase test("iz.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconHeight(L"icon/icon.png", 100);
-}
-
-RUNNER_TEST(ta_eHUaPbgfKg_i1)
-{
- W3CTestBase test("i1.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconHeight(L"icon/icon.png", 123);
-}
-
-RUNNER_TEST(ta_eHUaPbgfKg_i2)
-{
- W3CTestBase test("i2.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"icon/icon.png");
- test.CheckWidgetIconHeightIsNull(L"icon/icon.png");
-}
-
-RUNNER_TEST(ta_eHUaPbgfKg_i3)
-{
- W3CTestBase test("i3.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIcon(L"icon/icon.png");
- test.CheckWidgetIconHeightIsNull(L"icon/icon.png");
-}
-
-RUNNER_TEST(ta_eHUaPbgfKg_i4)
-{
- RUNNER_IGNORED_MSG(
- "Test definition seems to be inconsistent with the specification");
-// W3CTestBase test("i4.wgt");
-// test.StartTest();
-// test.CheckIsValid();
-// test.CheckWidgetIconHeight("icon/icon.png", 0);
-}
-
-RUNNER_TEST(ta_nYAcofihvj_iq)
-{
- W3CTestBase test("iq.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconWidth(L"icon/icon.png", 123);
-}
-
-RUNNER_TEST(ta_nYAcofihvj_i9)
-{
- RUNNER_IGNORED_MSG(
- "Test definition seems to be inconsistent with the specification");
-// W3CTestBase test("i9.wgt");
-// test.StartTest();
-// test.CheckIsValid();
-// test.CheckWidgetIconWidth("icon/icon.png", 0);
-}
-
-RUNNER_TEST(ta_nYAcofihvj_iw)
-{
- W3CTestBase test("iw.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconWidth(L"icon/icon.png", 100);
-}
-
-RUNNER_TEST(ta_nYAcofihvj_ie)
-{
- W3CTestBase test("ie.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconWidth(L"icon/icon.png", 123);
-}
-
-RUNNER_TEST(ta_nYAcofihvj_ir)
-{
- W3CTestBase test("ir.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconWidthIsNull(L"icon/icon.png");
-}
-
-RUNNER_TEST(ta_nYAcofihvj_it)
-{
- W3CTestBase test("it.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetIconWidthIsNull(L"icon/icon.png");
-}
-
-RUNNER_TEST(ta_nYAcofihvj_ib)
-{
- RUNNER_IGNORED_MSG("Test definition seems to be inconsistent with the specification");
-// W3CTestBase test("ib.wgt");
-// test.StartTest();
-// test.CheckIsValid();
-// test.CheckWidgetIconWidth("icon/icon.png", 0);
-}
-
-RUNNER_TEST(ta_aaaaaaaaaa_z1)
-{
- W3CTestBase test("z1.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFileEncoding(L"ISO-8859-1");
-}
-
-RUNNER_TEST(ta_aaaaaaaaaa_z2)
-{
- W3CTestBase test("z2.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetStartFileEncoding(L"Windows-1252");
-}
-
-RUNNER_TEST(ta_GVVIvsdEUo_z3)
-{
- RUNNER_TODO_MSG("http test not enabled !!!");
- W3CTestBase test("z3");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("Cannot check mimetype");
-}
-
-RUNNER_TEST(ta_GVVIvsdEUo_z4)
-{
- RUNNER_TODO_MSG("http test not enabled !!!");
- W3CTestBase test("z4.html");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_TODO_MSG("Cannot check mimetype");
-}
-
-RUNNER_TEST(ta_GVVIvsdEUo_z5)
-{
- RUNNER_TODO_MSG("http test not enabled !!!");
- W3CTestBase test("z5.wgt");
- test.StartTest();
- test.CheckIsNotValid();
- RUNNER_TODO_MSG("Cannot check mimetype for wrong value");
-}
-
-RUNNER_TEST(ta_ignore_unrequired_feature_with_invalid_name_gg)
-{
- W3CTestBase test("gg.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetFeatureListLength(0);
-}
-
-RUNNER_TEST(ta_defaultlocale_ignore_ta_de_000)
-{
- W3CTestBase test("ta-de-000.wgt");
- test.StartTest();
- test.CheckIsValid();
- test.CheckWidgetLanguageTags(LocalizationUtils::GetUserAgentLanguageTags());
-}
-
-RUNNER_TEST(ta_defaultlocale_ignore_ta_de_001)
-{
- W3CTestBase test("ta-de-001.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_IGNORED_MSG("Not clear what to test");
-}
-
-RUNNER_TEST(ta_defaultlocale_ignore_ta_de_002)
-{
- W3CTestBase test("ta-de-002.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_IGNORED_MSG("Not clear how to test");
-}
-
-RUNNER_TEST(ta_defaultlocale_ignore_ta_de_003)
-{
- W3CTestBase test("ta-de-003.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_IGNORED_MSG("Not valid Test Cases - W3C incompatibility");
-}
-
-RUNNER_TEST(ta_defaultlocale_ignore_ta_de_004)
-{
- W3CTestBase test("ta-de-004.wgt");
- test.StartTest();
- test.CheckIsValid();
- RUNNER_IGNORED_MSG("Not clear how to test");
-}
-
-RUNNER_TEST(ta_defaultlocale_process_dlocuse01)
-{
- RUNNER_IGNORED_MSG("No file");
-}
-
-RUNNER_TEST(ta_defaultlocale_process_dlocuse02)
-{
- RUNNER_IGNORED_MSG("No file");
-}
-
-RUNNER_TEST(ta_defaultlocale_process_dlocuse03)
-{
- RUNNER_IGNORED_MSG("No file");
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#include "W3CTestBase.h"
-
-#include <algorithm>
-#include <map>
-#include <utility>
-
-#include <dpl/log/log.h>
-#include <dpl/test/test_runner.h>
-#include <dpl/foreach.h>
-
-#include <dpl/localization/w3c_file_localization.h>
-
-#include <wrt_db_types.h>
-#include <dpl/wrt-dao-ro/widget_dao_read_only.h>
-
-#include "InstallerWrapper.h"
-
-using namespace WrtDB;
-
-W3CTestBase::~W3CTestBase()
-{
- LogDebug("Finishing test case");
-
- LogDebug("deleting dao");
- if (dao)
- {
- delete dao;
- }
-
- if (NULL != dao)
- {
- LogDebug("Uninstalling widget " << widgetHandle);
- InstallerWrapper::uninstall(widgetHandle);
- }
-
- LogDebug("Finished");
-}
-
-void W3CTestBase::StartTest()
-{
- this->widgetHandle = InstallerWrapper::install(DPL::FromUTF8String(widgetPath));
- if (InstallerWrapper::OtherError == this->widgetHandle) {
- this->dao = NULL;
- this->m_wrongWidgetPackage = false;
- } else if (InstallerWrapper::WrongWidgetPackage == this->widgetHandle) {
- this->dao = NULL;
- this->m_wrongWidgetPackage = true;
- } else {
- this->dao = new WidgetDAOReadOnly(this->widgetHandle);
- }
-}
-
-void W3CTestBase::CheckIsNotValid()
-{
- DPL::String msg;
- if (dao)
- {
- msg = L"Widget should not be installed but has been anyway";
- } else if (!m_wrongWidgetPackage) {
- msg = L"Unknown error happend";
- }
-
- RUNNER_ASSERT_MSG(!dao && m_wrongWidgetPackage,
- "Install finished with: " << msg);
-}
-
-void W3CTestBase::CheckIsValid()
-{
- DPL::String msg;
- if (!dao) {
- if (m_wrongWidgetPackage) {
- msg = L"Wrong widget package";
- } else {
- msg = L"Unknown error happend";
- }
- }
-
- RUNNER_ASSERT_MSG(dao && !m_wrongWidgetPackage,
- "Install finished with: " << msg);
-}
-
-void W3CTestBase::CheckAuthorName(const DPL::String& name)
-{
- RUNNER_ASSERT(dao);
- DPL::Optional<DPL::String> wname = dao->getAuthorName();
- RUNNER_ASSERT_MSG(!!wname, "Author name must not be null");
-
- RUNNER_ASSERT_MSG (*wname == name, "Author name is '" <<
- *wname << "' but should be '" << name << "'");
-}
-
-void W3CTestBase::CheckAuthorNameIsNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!dao->getAuthorName(), "Author name must be null");
-}
-
-void W3CTestBase::CheckAuthorNameIsNotNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!!dao->getAuthorName(), "Author name must not be null");
-}
-
-void W3CTestBase::CheckAuthorEmail(const DPL::String& email)
-{
- RUNNER_ASSERT(dao);
- DPL::Optional<DPL::String> wemail = dao->getAuthorEmail();
- RUNNER_ASSERT_MSG(!!wemail, "Author email must not be null");
-
- RUNNER_ASSERT_MSG (*wemail == email, "Author email is '" <<
- *wemail << "' but should be '" << email << "'");
-}
-
-void W3CTestBase::CheckAuthorEmailIsNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!dao->getAuthorEmail(), "Author email must be null");
-}
-
-void W3CTestBase::CheckAuthorEmailIsNotNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!!dao->getAuthorEmail(), "Author email must not be null");
-}
-
-void W3CTestBase::CheckAuthorHref(const DPL::String& href)
-{
- RUNNER_ASSERT(dao);
- DPL::Optional<DPL::String> whref = dao->getAuthorHref();
-
- RUNNER_ASSERT_MSG(!!whref, "Author href must not be null");
-
- RUNNER_ASSERT_MSG (*whref == href, "Author href is '" << *whref
- << "' but should be '" << href << "'");
-}
-
-void W3CTestBase::CheckAuthorHrefIsNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!dao->getAuthorHref(), "Author href must be null");
-}
-
-void W3CTestBase::CheckWidgetName(const DPL::String& name)
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> wname = localizedInfo.name;
- RUNNER_ASSERT_MSG (!!wname, "Widget name must be diffrent than null");
- RUNNER_ASSERT_MSG (*wname == name, "Widget name should be '" << name
- << "' but is '" << *wname << "'");
-}
-
-void W3CTestBase::CheckWidgetNameIsNull()
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> wname = localizedInfo.name;
- RUNNER_ASSERT_MSG (!wname, "Widget name must be null");
-}
-
-void W3CTestBase::CheckWidgetNameIsNotNull()
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> wname = localizedInfo.name;
- RUNNER_ASSERT_MSG (!!wname, "Widget name must not be null");
-}
-
-void W3CTestBase::CheckWidgetShortNameIsNull()
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> wname = localizedInfo.shortName;
- RUNNER_ASSERT_MSG (!wname,
- "Widget short name must be null");
-}
-
-void W3CTestBase::CheckWidgetShortNameIsNotNull()
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> wname = localizedInfo.shortName;
- RUNNER_ASSERT_MSG (!!wname,
- "Widget short name must not be null");
-}
-
-void W3CTestBase::CheckWidgetShortName(const DPL::String& name)
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> wname = localizedInfo.shortName;
- RUNNER_ASSERT_MSG(!!wname, "Widget short name must be diffrent than null");
- RUNNER_ASSERT_MSG(*wname == name, "Widget short name should be '" << name
- << "' but is '" << *wname << "'");
-}
-
-void W3CTestBase::CheckWidgetStartFile(const DPL::String& file, bool negate)
-{
- using namespace W3CFileLocalization;
- RUNNER_ASSERT(dao);
-
- DPL::Optional<DPL::String> opwfile =
- W3CFileLocalization::getStartFile(widgetHandle);
- DPL::String wfile;
- if (!!opwfile) wfile = *opwfile;
- LogDebug("Start file found: " << opwfile);
- if (negate)
- {
- RUNNER_ASSERT_MSG (wfile != file, "Widget start file same: '"
- << wfile << " == " << file << " '");
- }
- else
- {
- RUNNER_ASSERT_MSG (wfile == file, "Widget start file differs: '" <<
- wfile << " != " << file << " '");
- }
-}
-
-void W3CTestBase::CheckWidgetStartFileType(const DPL::String& type)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetStartFileInfo info =
- W3CFileLocalization::getStartFileInfo(widgetHandle, m_tags);
- DPL::Optional<DPL::String> wtype;
- if (!!info) wtype = info->type;
- RUNNER_ASSERT_MSG(!!wtype, "Widget start file type is not set.");
- RUNNER_ASSERT_MSG(type == *wtype, "Widget start file type: '" <<
- *wtype << " != " << type << " '");
-}
-
-void W3CTestBase::CheckWidgetStartFileEncoding(const DPL::String& enc)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetStartFileInfo info =
- W3CFileLocalization::getStartFileInfo(widgetHandle, m_tags);
- DPL::Optional<DPL::String> wenc;
- if (!!info) wenc = info->encoding;
- RUNNER_ASSERT_MSG(!!wenc, "Widget start file encoding is not set.");
- RUNNER_ASSERT_MSG(enc == *wenc, "Widget start file differs: '" <<
- *wenc << " != " << enc << " '");
-}
-
-void W3CTestBase::CheckWidgetHeightIsNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!dao->getPreferredSize().height,
- "Widget height must be null");
-}
-
-void W3CTestBase::CheckWidgetHeight(int height)
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(dao->getPreferredSize().height,
- "Widget height must not be null");
- int h = (*dao->getPreferredSize().height);
- RUNNER_ASSERT_MSG(h == height, "Widget height returned: " << h);
-}
-
-void W3CTestBase::CheckWidgetWidthIsNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!dao->getPreferredSize().width,
- "Widget width must be null");
-}
-
-void W3CTestBase::CheckWidgetWidth(int width)
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(dao->getPreferredSize().width,
- "Widget width must not be null");
- int w = (*dao->getPreferredSize().width);
- RUNNER_ASSERT_MSG(w == width, "Widget width returned: " << w);
-}
-
-void W3CTestBase::CheckWidgetPreferenceListLength(unsigned len)
-{
- RUNNER_ASSERT(dao);
- unsigned size = dao->getPropertyList().size();
- RUNNER_ASSERT_MSG(size == len, "Widget preference list should be of length:"
- << len << " but is: " << size);
-}
-
-void W3CTestBase::CheckWidgetPreference(const DPL::String& name,
- const DPL::String& value,
- bool readonly)
-{
- RUNNER_ASSERT(dao);
- PropertyDAOReadOnly::WidgetPreferenceList list = dao->getPropertyList();
- FOREACH (it, list)
- {
- if (it->key_name == name &&
- (!!it->key_value) &&
- *it->key_value == value &&
- it->readonly == readonly)
- {
- RUNNER_ASSERT_MSG(true, "Preference (" << name <<
- ", " << value << ") found!!");
- return; // Found so returning
- }
- }
- RUNNER_ASSERT_MSG(false, "Preference (" << name << ", " <<
- value << ") not found!!");
-}
-
-void W3CTestBase::CheckWidgetIconListLength(unsigned len)
-{
- RUNNER_ASSERT(dao);
-
- W3CFileLocalization::WidgetIconList list =
- W3CFileLocalization::getValidIconsList(widgetHandle, m_tags);
-
- W3CFileLocalization::WidgetIconList::iterator it;
- unsigned size = list.size();
- for (it = list.begin(); it != list.end(); ++it)
- {
- LogDebug(it->src);
- }
- RUNNER_ASSERT_MSG(size == len, "Widget icon list should be of length: " <<
- len << " but is: " << size);
-}
-
-int W3CTestBase::CheckWidgetIcon(const DPL::String& path)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetIcon icon = W3CFileLocalization::getIcon(widgetHandle);
- RUNNER_ASSERT_MSG(!!icon, "Icon not found");
-
- W3CFileLocalization::WidgetIconList list =
- W3CFileLocalization::getValidIconsList(widgetHandle, m_tags);
-
- W3CFileLocalization::WidgetIconList::iterator it;
- LogDebug("icons found: " << list.size());
- int number = 0;
- for (it = list.begin(); it != list.end(); ++it, ++number)
- {
- LogDebug("Checking: " << it->src);
- DPL::OptionalString oppath =
- W3CFileLocalization::getFilePathInWidgetPackage(widgetHandle,
- m_tags,
- it->src);
- if (!!oppath && *oppath == path)
- {
- RUNNER_ASSERT_MSG(true, "Icon (" << path << ") found!!");
- return number;
- }
- }
- RUNNER_ASSERT_MSG(false, "Icon (" << path << ") not found!!");
- return -1;
-}
-
-void W3CTestBase::CheckWidgetIconHeight(const DPL::String& path, int height)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetIcon icon = W3CFileLocalization::getIcon(widgetHandle);
- RUNNER_ASSERT_MSG(!!icon, "Icon not found");
- DPL::OptionalString oppath =
- W3CFileLocalization::getFilePathInWidgetPackage(widgetHandle,
- m_tags,
- icon->src);
- RUNNER_ASSERT_MSG(!!oppath && *oppath == path,
- "Wrong icon found: " << oppath << " != " << path);
- RUNNER_ASSERT_MSG(!!icon->height &&
- *(icon->height) == height, "Icon height not match");
-}
-
-void W3CTestBase::CheckWidgetIconHeightIsNull(const DPL::String& path)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetIcon icon = W3CFileLocalization::getIcon(widgetHandle);
- RUNNER_ASSERT_MSG(!!icon, "Icon not found");
- DPL::OptionalString oppath =
- W3CFileLocalization::getFilePathInWidgetPackage(widgetHandle,
- m_tags,
- icon->src);
- RUNNER_ASSERT_MSG(!!oppath && *oppath == path,
- "Wrong icon found: " << oppath << " != " << path);
- RUNNER_ASSERT_MSG(!icon->height, "Icon height should be null");
-}
-
-void W3CTestBase::CheckWidgetIconWidth(const DPL::String& path, int width)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetIcon icon = W3CFileLocalization::getIcon(widgetHandle);
- RUNNER_ASSERT_MSG(!!icon, "Icon not found");
- DPL::OptionalString oppath =
- W3CFileLocalization::getFilePathInWidgetPackage(widgetHandle,
- m_tags,
- icon->src);
- RUNNER_ASSERT_MSG(!!oppath && *oppath == path,
- "Wrong icon found: " << oppath << " != " << path);
- RUNNER_ASSERT_MSG(!!icon->width &&
- *(icon->width) == width, "Icon width not match");
-}
-
-void W3CTestBase::CheckWidgetIconWidthIsNull(const DPL::String& path)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetIcon icon = W3CFileLocalization::getIcon(widgetHandle);
- RUNNER_ASSERT_MSG(!!icon, "Icon not found");
- DPL::OptionalString oppath =
- W3CFileLocalization::getFilePathInWidgetPackage(widgetHandle,
- m_tags,
- icon->src);
- RUNNER_ASSERT_MSG(!!oppath && *oppath == path,
- "Wrong icon found: " << oppath << " != " << path);
- RUNNER_ASSERT_MSG(!icon->width, "Icon width should be null");
-}
-
-void W3CTestBase::CheckWidgetIconWidthAndHeight(const DPL::String& path,
- int width,
- int height)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetIcon icon = W3CFileLocalization::getIcon(widgetHandle);
- RUNNER_ASSERT_MSG(!!icon, "Icon not found");
- DPL::OptionalString oppath =
- W3CFileLocalization::getFilePathInWidgetPackage(widgetHandle,
- m_tags,
- icon->src);
- RUNNER_ASSERT_MSG(!!oppath && *oppath == path,
- "Wrong icon found: " << oppath << " != " << path);
- RUNNER_ASSERT_MSG(!!icon->width &&
- *(icon->width) == width, "Icon width not match");
- RUNNER_ASSERT_MSG(!!icon->height &&
- *(icon->height) == height, "Icon height not match");
-}
-
-void W3CTestBase::CheckWidgetIconWidthAndHeightAreNull(const DPL::String& path)
-{
- RUNNER_ASSERT(dao);
- OptionalWidgetIcon icon = W3CFileLocalization::getIcon(widgetHandle);
- RUNNER_ASSERT_MSG(!!icon, "Icon not found");
- DPL::OptionalString oppath =
- W3CFileLocalization::getFilePathInWidgetPackage(widgetHandle,
- m_tags,
- icon->src);
- RUNNER_ASSERT_MSG(!!oppath && *oppath == path,
- "Wrong icon found: " << oppath << " != " << path);
- RUNNER_ASSERT_MSG(!icon->width, "Icon width should be null");
- RUNNER_ASSERT_MSG(!icon->height, "Icon height should be null");
-}
-
-void W3CTestBase::CheckWidgetId(const DPL::String& id)
-{
- RUNNER_ASSERT(dao);
- DPL::OptionalString tmp = dao->getGUID();
- RUNNER_ASSERT(!!tmp);
- RUNNER_ASSERT_MSG(id == *tmp, "Widget id doesn't match (" <<
- id << " != " << *tmp << ")");
-}
-
-void W3CTestBase::CheckWidgetIdIsNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!dao->getGUID(), "Widget id must be null");
-}
-
-void W3CTestBase::CheckWidgetDescriptionIsNull()
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- RUNNER_ASSERT_MSG(!localizedInfo.description,
- "Widget description must be null");
-}
-
-void W3CTestBase::CheckWidgetDescriptionIsNotNull()
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- RUNNER_ASSERT_MSG(!localizedInfo.description,
- "Widget description must not be null");
-}
-
-void W3CTestBase::CheckWidgetDescription(const DPL::String& desc)
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> wdesc = localizedInfo.description;
- RUNNER_ASSERT_MSG(!!wdesc, "Widget description must not be null");
- RUNNER_ASSERT_MSG(*wdesc == desc, "Widget description is '" <<
- *wdesc << "' but should be '" << desc << "'");
-}
-
-void W3CTestBase::CheckWidgetLicenseIsNull()
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- RUNNER_ASSERT_MSG(!localizedInfo.license, "Widget license must be null");
-}
-
-void W3CTestBase::CheckWidgetLicense(const DPL::String& license)
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> lic = localizedInfo.license;
- RUNNER_ASSERT_MSG(!!lic, "Widget license must not be null");
- RUNNER_ASSERT_MSG(license == *lic, "Widget license doesn't match (" <<
- license << " != " << *lic << ")");
-}
-
-void W3CTestBase::CheckWidgetLicenseHrefIsNull()
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- RUNNER_ASSERT_MSG(!localizedInfo.licenseHref,
- "Widget license href must be null");
-}
-
-void W3CTestBase::CheckWidgetLicenseHref(const DPL::String& license)
-{
- RUNNER_ASSERT(dao);
- WidgetLocalizedInfo localizedInfo =
- W3CFileLocalization::getLocalizedInfo(widgetHandle);
- DPL::Optional<DPL::String> lic = localizedInfo.licenseHref;
- RUNNER_ASSERT_MSG(!!lic, "Widget license href must not be null");
- RUNNER_ASSERT_MSG(license == *lic, "Widget license href doesn't match (" <<
- license << " != " << *lic << ")");
-}
-
-void W3CTestBase::CheckWidgetVersionIsNull()
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(!dao->getVersion(), "Widget version must be null");
-}
-
-void W3CTestBase::CheckWidgetVersion(const DPL::String& version)
-{
- RUNNER_ASSERT(dao);
- DPL::Optional<DPL::String> ver = dao->getVersion();
- RUNNER_ASSERT_MSG(!!ver, "Widget version must not be null");
-
- RUNNER_ASSERT_MSG(version == *ver, "Widget version should be" <<
- version << " but is " << *ver << ")");
-}
-
-void W3CTestBase::CheckWidgetFeatureListLength(unsigned len)
-{
- RUNNER_ASSERT(dao);
- unsigned size = dao->getFeaturesList().size();
- RUNNER_ASSERT_MSG(size == len, "Widget feature list should be of length: "
- << len << " but is: " << size);
-}
-
-void W3CTestBase::CheckWidgetFeature(const DPL::String& name )
-{
- RUNNER_ASSERT(dao);
- RUNNER_ASSERT_MSG(dao->hasFeature(DPL::ToUTF8String(name)),
- "Feature ( " << name << " ) not found.");
-}
-
-void W3CTestBase::CheckWidgetFeature(const DPL::String& name, bool required)
-{
- bool found = false;
- bool verified = false;
- RUNNER_ASSERT(dao);
- WidgetFeatureSet features = dao->getFeaturesList();
- FOREACH (it, features)
- {
- if (it->name == name)
- {
- found = true;
- if (it->required == required)
- {
- verified = true;
- }
- }
- }
- RUNNER_ASSERT_MSG(found, "Feature ( " << name << " ) not found. ");
- RUNNER_ASSERT_MSG(verified, "Feature required attribute mismatched.");
-}
-
-void W3CTestBase::CheckWidgetFeatureParamListLength(const DPL::String& name,
- unsigned length)
-{
- bool found = false;
- bool verified = false;
- RUNNER_ASSERT(dao);
- WidgetFeatureSet features = dao->getFeaturesList();
- FOREACH (it, features)
- {
- if (it->name == name)
- {
- found = true;
- size_t size =
- dao->getResourceAttribute(DPL::ToUTF8String(name)).size();
- if (size == length)
- {
- verified = true;
- break;
- }
- }
- }
- RUNNER_ASSERT_MSG(found, "Feature ( " << name << " ) not found. ");
- RUNNER_ASSERT_MSG(verified,
- "Feature ( " << name << " ) has wrong params count:");
-}
-
-void W3CTestBase::CheckWidgetFeatureParam(const DPL::String& fname,
- const DPL::String& pname)
-{
- bool found = false;
- bool verified = false;
- RUNNER_ASSERT(dao);
- WidgetFeatureSet features = dao->getFeaturesList();
- FOREACH (it, features)
- {
- if (it->name == fname)
- {
- found = true;
- std::list<std::string> ns =
- dao->getResourceAttribute(DPL::ToUTF8String(fname));
- if (std::find(ns.begin(),
- ns.end(),
- DPL::ToUTF8String(pname)) != ns.end())
- {
- verified = true;
- break;
- }
- }
- }
- RUNNER_ASSERT_MSG(found, "Feature ( " << fname << " ) not found. ");
- RUNNER_ASSERT_MSG(verified,
- "Feature param ( " << pname << " ) not found. ");
-}
-
-void W3CTestBase::CheckWidgetFeatureParam(const DPL::String& fname,
- const DPL::String& pname,
- const DPL::String& value)
-{
- bool ffound = false;
- bool pfound = false;
- bool verified = false;
- RUNNER_ASSERT(dao);
- WidgetFeatureSet features = dao->getFeaturesList();
- FOREACH (it, features)
- {
- if (it->name == fname)
- {
- ffound = true;
- if (it->params.count(pname) >= 1)
- {
- pfound = true;
- std::pair<WidgetParamMap::const_iterator,
- WidgetParamMap::const_iterator> paramValuesRange;
- paramValuesRange = it->params.equal_range(pname);
- std::pair<DPL::String const, DPL::String> toFind(pname,
- value);
- if (std::find(paramValuesRange.first, paramValuesRange.second,
- toFind) != paramValuesRange.second)
- {
- verified = true;
- break;
- }
- }
- }
- }
- RUNNER_ASSERT_MSG(ffound,
- "Feature ( " << fname << " ) not found. ");
- RUNNER_ASSERT_MSG(pfound,
- "Feature param ( " << pname << " ) not found. ");
- RUNNER_ASSERT_MSG(verified,
- "Feature param value mismatch ( " << value << " )");
-}
-
-void W3CTestBase::CheckWidgetWindowModesCount(size_t len)
-{
- RUNNER_ASSERT(dao);
- size_t size = dao->getWindowModes().size();
- RUNNER_ASSERT_MSG(size == len,
- "Widget window modes list should be of length: "
- << len << " but is: " << size);
-}
-
-void W3CTestBase::CheckWidgetWindowMode(const DPL::String& mode)
-{
- RUNNER_ASSERT(dao);
- std::list<DPL::String> list = dao->getWindowModes();
- FOREACH(m, list) {
- if (*m == mode) {
- RUNNER_ASSERT(true);
- return;
- }
- }
-
- RUNNER_ASSERT_MSG(false, "Widget window mode'" << mode <<" not found");
-}
-
-void W3CTestBase::CheckWidgetLanguageTags(const LanguageTagsList& tags)
-{
- RUNNER_ASSERT_MSG(m_tags == tags, "Locales do not pass");
-}
-
-void W3CTestBase::CheckWidgetLanguageTag(const DPL::String& tag)
-{
- FOREACH(it, m_tags) {
- if (*it == tag) {
- RUNNER_ASSERT_MSG(false, "locale should not be found");
- return;
- }
- }
- RUNNER_ASSERT(true);
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef W3C_TEST_BASE_H
-#define W3C_TEST_BASE_H
-
-#include <memory>
-
-#include <dpl/test/test_runner.h>
-#include <dpl/noncopyable.h>
-#include <dpl/string.h>
-
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <dpl/localization/localization_utils.h>
-#include <dpl/optional_typedefs.h>
-
-#include <string>
-
-#include "InstallerWrapper.h"
-
-class W3CTestBase : DPL::Noncopyable
-{
-protected:
- WrtDB::WidgetDAOReadOnly* dao;
-
-protected:
- std::string widgetPath;
- InstallerWrapper::WidgetHandle widgetHandle;
- bool m_wrongWidgetPackage;
- LanguageTagsList m_tags;
-
-public:
- W3CTestBase (const std::string path) :
- dao(0),
- widgetPath (std::string(WrtDB::GlobalConfig::GetTestsDataPath()) +
- "/w3c_widgets/" + path),
- widgetHandle(0),
- m_wrongWidgetPackage(false)
- {
- LanguageTagsList empty;
- LocalizationUtils::SetUserLanguageTags(empty);
- empty.push_back(L"en");
- LocalizationUtils::SetSystemLanguageTags(empty);
- m_tags = LocalizationUtils::GetUserAgentLanguageTags();
- }
-
- void StartTest();
-
- void CheckIsValid();
- void CheckIsNotValid();
- void CheckAuthorName(const DPL::String&);
- void CheckAuthorNameIsNull();
- void CheckAuthorNameIsNotNull();
- void CheckAuthorEmail(const DPL::String&);
- void CheckAuthorEmailIsNull();
- void CheckAuthorEmailIsNotNull();
- void CheckAuthorHref(const DPL::String&);
- void CheckAuthorHrefIsNull();
- void CheckWidgetName(const DPL::String&);
- void CheckWidgetNameIsNull();
- void CheckWidgetNameIsNotNull();
- void CheckWidgetShortName(const DPL::String&);
- void CheckWidgetShortNameIsNull();
- void CheckWidgetShortNameIsNotNull();
- void CheckWidgetStartFile(const DPL::String&, bool negate = false);
- void CheckWidgetStartFileEncoding(const DPL::String&);
- void CheckWidgetStartFileType(const DPL::String&);
- void CheckWidgetHeight(int height);
- void CheckWidgetHeightIsNull();
- void CheckWidgetWidth(int widget);
- void CheckWidgetWidthIsNull();
- void CheckWidgetPreferenceListLength(unsigned len);
- void CheckWidgetPreference(const DPL::String& name,
- const DPL::String& value,
- bool readonly);
- void CheckWidgetIconListLength(unsigned len);
- int CheckWidgetIcon(const DPL::String& name);
- void CheckWidgetIconHeight(const DPL::String& name, int height);
- void CheckWidgetIconWidth(const DPL::String& name, int width);
- void CheckWidgetIconHeightIsNull(const DPL::String& name);
- void CheckWidgetIconWidthIsNull(const DPL::String& name);
- void CheckWidgetIconWidthAndHeight(const DPL::String& path,
- int width,
- int height);
- void CheckWidgetIconWidthAndHeightAreNull(const DPL::String& path);
- void CheckWidgetId(const DPL::String& id);
- void CheckWidgetIdIsNull();
- void CheckWidgetDescriptionIsNull();
- void CheckWidgetDescriptionIsNotNull();
- void CheckWidgetDescription(const DPL::String& description);
- void CheckWidgetLicenseIsNull();
- void CheckWidgetLicense(const DPL::String& license);
- void CheckWidgetLicenseHrefIsNull();
- void CheckWidgetLicenseHref(const DPL::String& license);
- void CheckWidgetVersionIsNull();
- void CheckWidgetVersion(const DPL::String& version);
- void CheckWidgetFeatureListLength(unsigned len);
- void CheckWidgetFeature(const DPL::String& name);
- void CheckWidgetFeature(const DPL::String& name, bool required);
- void CheckWidgetFeatureParamListLength(const DPL::String& fname,
- unsigned length);
- void CheckWidgetFeatureParam(const DPL::String& fname,
- const DPL::String& pname);
- void CheckWidgetFeatureParam(const DPL::String& fname,
- const DPL::String&,
- const DPL::String&);
- void CheckWidgetWindowModesCount(size_t len);
- void CheckWidgetWindowMode(const DPL::String& mode);
- void CheckWidgetLanguageTags(const LanguageTagsList& tags);
- void CheckWidgetLanguageTag(const DPL::String& tag);
-
- virtual ~W3CTestBase();
-};
-
-#endif
+++ /dev/null
-#!/bin/bash
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-for i in $(cat test-suite.xml| grep "<test" | sed "s|.*src=\"\([^\"]\+\)\".*$|\1|");
-do
- mkdir -p `dirname $i`
- wget -O $i "http://dev.w3.org/2006/waf/widgets/test-suite/$i"
-done
-
+++ /dev/null
-#!/bin/bash
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-TEST1=`cat test-suite.xml | grep 'for=' | \
- sed 's|\(.*for="ta-\)\([^"]\+\)\(".*\)|\2|' | sed "s|-|.|g" | sort -u`
-
-TEST2=`cat TestCases.cpp | grep 'RUNNER_TEST(ta_' | sed 's|RUNNER_TEST(ta_||g' \
- | sed 's|_[^_]\+$||g' | sed "s|_ta_de||g" | sed "s|_|.|g" | sort -u`
-
-TESTS=`for i in $TEST1 $TEST2; do
- echo $i
-done | sort -u`
-
-for i in $TESTS
-do
- echo $i: `grep ta-$i test-suite.xml -c ` `grep ta_$i TestCases.cpp -c`
-done
+++ /dev/null
-<?xml version="1.0" encoding="UTF-8"?>
-<testsuite spec="../Overview.html">
- <test id="aa" for="ta-ACCJfDGwDQ" src="test-cases/ta-ACCJfDGwDQ/000/aa.wgt" expected="invalid">
- Tests that the UA rejects configuration documents that don't have
- correct widget element at the root. To pass, the UA must treat this as an
- invalid widget (the root element is not widget).
- </test>
-
- <test id="ab" for="ta-ACCJfDGwDQ" src="test-cases/ta-ACCJfDGwDQ/001/ab.wgt" expected="invalid">
- Tests that the UA rejects configuration documents that don't have correct
- widget element at the root. To pass, the UA must treat this as an invalid widget (the namespace is wrong).
- </test>
-
- <test id="ac" for="ta-ACCJfDGwDQ" src="test-cases/ta-ACCJfDGwDQ/002/ac.wgt" expected="invalid">
- Tests that the UA rejects configuration documents that don't have correct widget
- element at the root.To pass, the UA must treat this as an invalid widget (the namespace is missing).
- </test>
-
- <test id="af" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/000/af.wgt">
- Test that a user agent correctly processes a author element.
- To pass, the author name must be the string "PASS".
- </test>
-
- <test id="ag" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/001/ag.wgt">
- Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space.
- To pass, the widget author must be the string "P A S S" (i.e., white space collapsed to single space).
- </test>
-
- <test id="ah" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/002/ah.wgt">
- Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space.
- To pass, the author name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at start/end trimmed).
- </test>
-
- <test id="ai" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/003/ai.wgt">
- Test that a user agent correctly applies the rule for getting a single attribute value.
- To pass, the author email must be the string "PASS".
- </test>
-
- <test id="aj" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/004/aj.wgt">
- Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space.
- To pass, the author name must be the string "PASS".
- </test>
-
- <test id="ak" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/005/ak.wgt">
- Test that a user agent correctly applies the rule for getting a single attribute value and the Rule for Getting Text Content with Normalized White Space.
- To pass, the author name must be the string "PASS".
- </test>
-
- <test id="al" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/006/al.wgt">
- Test the ability of the user agent to handle an empty author element.
- To pass, the author name must be an empty string.
- </test>
-
- <test id="am" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/007/am.wgt">
- Test the ability of the user agent to correctly process the author href attribute.
- To pass, the value of author href must be "PASS:PASS".
- </test>
-
- <test id="an" for="ta-argMozRiC" src="test-cases/ta-argMozRiC/008/an.wgt">
- Test the ability of the user agent to correctly process the author href attribute.
- To pass, the value of author href must be ignored.
- </test>
-
- <test id="ao" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/000/ao.wgt">
- Test that a user agent correctly processes a name element.
- To pass, the widget name must be the string "PASS".
- </test>
-
- <test id="ap" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/001/ap.wgt">
- Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space.
- To pass, the widget name must be the string "P A S S" (i.e., white space collapsed to single space).
- </test>
-
- <test id="aq" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/002/aq.wgt">
- Test that a user agent correctly applies the Rule for Getting Text Content with Normalized White Space.
- To pass, the widget name must be the string "PASS" (i.e., all white space collapsed to single space, spaces at front/back trimmed).
- </test>
-
- <test id="ar" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/003/ar.wgt">
- Test that a user agent correctly applies the rule for getting a single attribute value.
- To pass, the widget short name must be the string "PASS".
- </test>
-
- <test id="as" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/004/as.wgt">
- Test that a user agent correctly applies the rule for getting a single attribute value and
- the Rule for Getting Text Content with Normalized White Space.
- To pass, the widget short name must be the string "PASS" and the widget name must be "PASS".
- </test>
-
- <test id="at" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/005/at.wgt">
- Test that a user agent correctly applies the rule for getting a single attribute value and
- the Rule for Getting Text Content with Normalized White Space.
- To pass, the widget short name must be the string "PASS" and the widget name must be "PASS".
- </test>
-
- <test id="au" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/006/au.wgt">
- Test that a user agent correctly processes the short attribue.
- To pass, the widget short name must be an empty string.
- </test>
-
- <test id="av" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/007/av.wgt">
- Test the ability of the user agent to handle an empty name element.
- To pass, the widget name must be an empty string.
- </test>
-
- <test id="oa" for="ta-AYLMhryBnD" src="test-cases/ta-AYLMhryBnD/008/oa.wgt">
- Test that a user agent correctly processes a name element with xml:lang attribute.
- To pass, the widget name must be the string "PASS".
- </test>
-
- <test id="aw" for="ta-BnWPqNvNVo" src="test-cases/ta-BnWPqNvNVo/000/aw.wgt">
- Test that the user agent does not attempt to load a default start file when a custom start file has been declared.
- To pass, the widget start file must point to "pass.html" and the icons list must contain a pointer to "icon.png" at the root of the widget.
- </test>
-
- <test id="ax" for="ta-BxjoiWHaMr" src="test-cases/ta-BxjoiWHaMr/000/ax.wgt">
- Test the UA's ability process the height attribute.
- To pass, the widget height must be the numeric value 123.
- </test>
-
- <test id="ay" for="ta-BxjoiWHaMr" src="test-cases/ta-BxjoiWHaMr/001/ay.wgt">
- Test the UA's ability process the height attribute.
- To pass, the user agent must ignore the value of the height attribute (the value is composed of characters).
- </test>
-
- <test id="az" for="ta-BxjoiWHaMr" src="test-cases/ta-BxjoiWHaMr/002/az.wgt">
- Test the UA's ability process the height attribute.
- To pass, the widget height must be the numeric value 100 (resulting from rule for parsing a non-negative integer).
- </test>
-
- <test id="a1" for="ta-BxjoiWHaMr" src="test-cases/ta-BxjoiWHaMr/003/a1.wgt">
- Test the UA's ability process the height attribute.
- To pass, the widget height must be the numeric value 123 (resulting from rule for parsing a non-negative integer).
- </test>
-
- <test id="a2" for="ta-BxjoiWHaMr" src="test-cases/ta-BxjoiWHaMr/004/a2.wgt">
- Test the UA's ability process the height attribute.
- To pass, the widget height must be ignored (the value is an empty string, hence it would be ignored).
- </test>
-
- <test id="a3" for="ta-BxjoiWHaMr" src="test-cases/ta-BxjoiWHaMr/005/a3.wgt">
- Test the UA's ability process the height attribute.
- To pass, the widget height must be ignored (the value is a sequence of space characters, hence it would be ignored).
- </test>
-
- <test id="a4" for="ta-BxjoiWHaMr" src="test-cases/ta-BxjoiWHaMr/006/a4.wgt">
- Test the UA's ability process the height attribute.
- To pass, the widget height must be ignored (the value is an empty string).
- </test>
-
- <test id="a5" for="ta-DwhJBIJRQN" src="test-cases/ta-DwhJBIJRQN/000/a5.wgt">
- Test that the UA skips preference elements without a name attribute.
- To pass, widget preferences must remain an empty list (i.e., the preference is skipped).
- </test>
-
- <test id="a6" for="ta-DwhJBIJRQN" src="test-cases/ta-DwhJBIJRQN/001/a6.wgt">
- Test that the UA skips preference element already defined.
- To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false".
- </test>
-
- <test id="a7" for="ta-DwhJBIJRQN" src="test-cases/ta-DwhJBIJRQN/002/a7.wgt">
- Test that the UA does a case sensitive comparison on the value of the readonly attribute.
- To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false".
- </test>
-
- <test id="a8" for="ta-DwhJBIJRQN" src="test-cases/ta-DwhJBIJRQN/003/a8.wgt">
- Test that the UA does a case sensitive comparison on the value of the readonly attribute.
- To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "true".
- </test>
-
- <test id="a9" for="ta-DwhJBIJRQN" src="test-cases/ta-DwhJBIJRQN/004/a9.wgt">
- Test that the UA sets the readonly attribute to false by default.
- To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false".
- </test>
-
- <test id="ba" for="ta-DwhJBIJRQN" src="test-cases/ta-DwhJBIJRQN/005/ba.wgt">
- Test that the UA skips multiple preference element already defined.
- To pass, widget preference must contain one preference whose name is "a" and whose value is "a" and whose readonly attr value must be "false".
- </test>
-
- <test id="bb" for="ta-DwhJBIJRQN" src="test-cases/ta-DwhJBIJRQN/006/bb.wgt">
- Test the UA's ability store preferences whose name vary only in case.
- To pass, widget preference must contain two preferences: 1 must have a name "a" and whose value is "a" and whose readonly attr value must be "false". 2 must have a name "A" and whose value is "b" and whose readonly attribute value must be "false".
- </test>
-
- <test id="bc" for="ta-DwhJBIJRQN" src="test-cases/ta-DwhJBIJRQN/007/bc.wgt">
- Tests that the UA applies the rule for getting a single attribute value to name, value, and readonly attributes.
- To pass, widget preference must contain one preference whose name is "PASS" and whose value is "PASS" and whose readonly attr value must be "false".
- </test>
-
- <test id="bg" for="ta-dxzVDWpaWg" src="test-cases/ta-dxzVDWpaWg/000/bg.wgt" expected="invalid">
- Test to make sure that the UA only checks the root of the widget for config files, and not in an arbritrary folder.
- To pass, the user agent must treat this widget as an invalid widget (config file is not at the root).
- </test>
-
- <test id="bh" for="ta-dxzVDWpaWg" src="test-cases/ta-dxzVDWpaWg/001/bh.wgt" expected="invalid">
- Test to make sure that the UA only checks the root of the widget for config files, and not in a locale folder.
- To pass, the user agent must treat this widget as an invalid widget (config file is not at the root, but in locale folder).
- </test>
-
- <test id="bj" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/000/bj.wgt">
- Tests the UA's ability to locate an icon at the root of the widget.
- To pass, after processing, the icons list must contain "icon.png",
- which is at the root of the widget.
- </test>
-
- <test id="bk" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/001/bk.wgt">
- Tests the UA's ability to locate an icon in a locale folder.
- To pass, after processing, the icons list must contain a pointer to "locales/en/icon.png".
- </test>
-
- <test id="bl" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/002/bl.wgt">
- Tests the UA's ability to locate an icon in a locale folder and at the root of the widget.
- To pass, after processing, the icons list must contain a pointer to "locales/en/icon.jpg", and "icon.png", which is at the root of the widget.
- The icons list can be in any order, so long as it contains "icon.png" and "locales/en/icon.jpg".
- </test>
-
- <test id="bm" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/003/bm.wgt">
- Tests the UA's ability to deal with custom icon declaration in the config document and matching default icons.
- To pass, the icons list must contain a pointer to "locales/en/icon.jpg", and "icon.png", which is at the root of the widget.
- The icons list can be in any order, so long as it contains "icon.png" and "locales/en/icon.jpg".
- </test>
-
- <test id="bn" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/004/bn.wgt">
- Tests the UA's ability to deal with custom icon declarations in the config document and matching default icons. To pass, the icons list must contain a pointer to "icons/pass.png", and "locales/en/icon.png" (ordering of the items in the list is irrelevant).
- </test>
-
- <test id="bo" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/005/bo.wgt">
- Test the UA's ability to load default icons in the correct order.
- To pass, the icons list must contain "icon.png" and 'icon.jpg'.
- </test>
-
- <test id="bp" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/006/bp.wgt">
- Test the UA's ability to load default icons in the correct order.
- To pass, the icons list must contain a pointer "icon.png" and a pointer to "locales/en/icon.jpg" (order in the list is not relevant).
- </test>
-
- <test id="ad" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/007/ad.wgt">
- Tests if the UA treats file names in the default icons files table case-sensitively.
- To pass, the icons list must only contain a pointer to "icon.png"
- at the root of the widget.
- </test>
-
- <test id="ae" for="ta-FAFYMEGELU" src="test-cases/ta-FAFYMEGELU/008/ae.wgt">
- Tests if the UA treats file names in the default icons files table case-sensitively.
- To pass, the icons list must only contain a pointer to "locales/en/icon.png".
- </test>
-
- <test id="bq" for="ta-hkWmGJgfve" src="test-cases/ta-hkWmGJgfve/000/bq.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the content element.
- To pass, the widget start file must be "pass.html".
- </test>
-
- <test id="br" for="ta-hkWmGJgfve" src="test-cases/ta-hkWmGJgfve/001/br.wgt" expected="invalid">
- Tests the UA's ability to ignore subsequent repetitions of the content element.
- To pass, the widget must be treated by the user agent as an invalid widget.
- </test>
-
- <test id="bs" for="ta-hkWmGJgfve" src="test-cases/ta-hkWmGJgfve/002/bs.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the content element.
- To pass, the widget start file must be "pass.html".
- </test>
-
- <test id="bt" for="ta-klLDaEgJeU" src="test-cases/ta-klLDaEgJeU/000/bt.wgt" expected="invalid">
- Test to make sure the user agent rejects malformed XML.
- To pass, the widget must be treated as invalid by the user agent.
- </test>
-
- <test id="bu" for="ta-klLDaEgJeU" src="test-cases/ta-klLDaEgJeU/001/bu.wgt" expected="invalid">
- Test to make sure the user agent rejects malformed XML.
- To pass, the widget must be treated as invalid by the user agent.
- </test>
-
- <test id="bv" for="ta-klLDaEgJeU" src="test-cases/ta-klLDaEgJeU/002/bv.wgt">
- Tests support of XML, XMLNS, and UTF-8.
- To pass, the user agent must load 'pass&.html' as the start file.
- </test>
-
- <test id="bw" for="ta-klLDaEgJeU" src="test-cases/ta-klLDaEgJeU/003/bw.wgt">
- Tests support of XML, XMLNS, and UTF-8. To pass, the widget author must be the string 'PASS'.
- </test>
-
- <test id="lt" for="ta-klLDaEgJeU" src="test-cases/ta-klLDaEgJeU/004/lt.wgt" expected="invalid">
- Tests support of XML, by making sure the user agent treats < as malformed XML. To pass, the user agent must treat this as an invalid widget.
- </test>
-
- <test id="amp" for="ta-klLDaEgJeU" src="test-cases/ta-klLDaEgJeU/005/amp.wgt" expected="invalid">
- Tests support of XML, by making sure the user agent treats & as malformed XML. To pass, the user agent must treat this as an invalid widget.
- </test>
-
- <test id="bx" for="ta-LYLMhryBBT" src="test-cases/ta-LYLMhryBBT/000/bx.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the name element.
- To pass, the name of the widget must be "PASS".
- </test>
-
- <test id="by" for="ta-LYLMhryBBT" src="test-cases/ta-LYLMhryBBT/001/by.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the name element.
- To pass, the name of the widget must be an empty string.
- </test>
-
- <test id="bz" for="ta-LYLMhryBBT" src="test-cases/ta-LYLMhryBBT/002/bz.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the name element.
- To pass, the name of the widget must be "PASS".
- </test>
-
- <test id="b1" for="ta-RawAIWHoMs" src="test-cases/ta-RawAIWHoMs/000/b1.wgt">
- Tests the ability for a UA to correctly process an widget element's id attribute.
- To pass, the widget id must be "pass:".
- </test>
-
- <test id="rd" for="ta-RawAIWHoMs" src="test-cases/ta-RawAIWHoMs/001/rd.wgt">
- Tests the ability for a UA to correctly process an widget element's id attribute.
- To pass, the widget id must ignore the value (not a valid IRI).
- </test>
-
- <test id="b2" for="ta-RawAIWHoMs" src="test-cases/ta-RawAIWHoMs/002/b2.wgt">
- Tests the ability for a UA to correctly process an widget element's id attribute.
- To pass, the widget id must equal "pass:" (applies rule for getting a single attribute value).
- </test>
-
- <test id="cc" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/008/cc.wgt">
- Tests the user agent's ability to select start files in the appropriate order.
- To pass, the user agent must select index.htm as the start file.
- </test>
-
- <test id="cv" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/009/cv.wgt">
- Tests the user agent's ability to select start files in the appropriate order.
- To pass, the user agent must select index.html as the start file.
- </test>
-
- <test id="b3" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/000/b3.wgt">
- Tests to see if the user agents applies the algorithm to locate a default start file, when no custom start file is present.
- To pass, index.htm must be the widget start file and the start file content-type must be text/html.
- </test>
-
- <test id="b4" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/001/b4.wgt">
- Tests to see if the user agents applies the algorithm to locate a default start file, when no custom start file is present.
- To pass, index.html must be the widget start file and the start file content-type must be text/html.
- </test>
-
- <test id="b0" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/002/b0.wgt" expected="invalid">
- Tests the UA's ability treat file names in the default start files table case-sensitively.
- To pass, the user agent must treat this widget as an invalid widget.
- </test>
-
- <test id="c1" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/003/c1.wgt" expected="invalid">
- Tests the UA's ability treat file names in the default start files table case-sensitively.
- To pass, the user agent must treat this widget as an invalid widget.
- </test>
-
- <test id="c2" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/004/c2.wgt" expected="invalid">
- Tests the UAs ability treat file names in the default start files table case-sensitively.
- To pass, the user agent must treat this widget as an invalid widget.
- </test>
-
- <test id="c3" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/005/c3.wgt" expected="invalid">
- Tests the UAs ability treat file names in the default start files table case-sensitively.
- To pass, the user agent must treat this widget as an invalid widget.
- </test>
-
- <test id="c4" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/006/c4.wgt">
- Tests the UAs ability treat file names in the default start files table case-sensitively.
- To pass, the user agent must ignore "INdeX.htm" at the root, but must use "index.html" as the default start file.
- </test>
-
- <test id="c5" for="ta-RGNHRBWNZV" src="test-cases/ta-RGNHRBWNZV/007/c5.wgt">
- Tests the UAs ability treat file names in the default start files table case-sensitively.
- To pass, the user agent must ignore "INdeX.htm" in the locales folder, but must use "index.html" as the default start file.
- </test>
-
- <test id="b5" for="ta-RRZxvvTFHx" src="test-cases/ta-RRZxvvTFHx/000/b5.wgt" expected="invalid">
- Tests that a UA does not go searching in an arbritrary folder ("abc123") for default start files.
- To pass, the user agent must treat this widget as an invalid widget.
- </test>
-
- <test id="b6" for="ta-RRZxvvTFHx" src="test-cases/ta-RRZxvvTFHx/001/b6.wgt">
- Tests that a UA does not go searching in an arbritrary folder ("foo/bar") for default start files.
- To pass, the user agent must use index.html at the root of the widget as
- the start file</test>
-
- <test id="b7" for="ta-sdwhMozwIc" src="test-cases/ta-sdwhMozwIc/000/b7.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the author element.
- To pass, the author name must be "PASS", href must be "PASS:" and email must be "PASS".
- </test>
-
- <test id="b8" for="ta-sdwhMozwIc" src="test-cases/ta-sdwhMozwIc/001/b8.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the author element.
- To pass, the author name must be an empty string.
- </test>
-
- <test id="b9" for="ta-sdwhMozwIc" src="test-cases/ta-sdwhMozwIc/002/b9.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the author element.
- To pass, the author name must be "PASS", href must be "PASS:" and email must be "PASS".
- </test>
-
- <test id="c6" for="ta-UEMbyHERkI" src="test-cases/ta-UEMbyHERkI/000/c6.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the description element.
- To pass, the widget description must be "PASS".
- </test>
-
- <test id="c7" for="ta-UEMbyHERkI" src="test-cases/ta-UEMbyHERkI/001/c7.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the description element.
- To pass, the widget description must be an empty string.
- </test>
-
- <test id="rb" for="ta-UEMbyHERkI" src="test-cases/ta-UEMbyHERkI/002/rb.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the description element.
- To pass, the widget description must be "PASS".
- </test>
-
- <test id="c8" for="ta-UEMbyHERkI" src="test-cases/ta-UEMbyHERkI/003/c8.wgt">
- Tests the UA's ability to correctly select the description element when the xml:lang attribute is present.
- To pass, the widget description must be "PASS".
- </test>
-
- <test id="c9" for="ta-UScJfQHPPy" src="test-cases/ta-UScJfQHPPy/000/c9.wgt">
- Test the UA's ability process the width attribute.
- To pass, the value of the widget width must be ignored (the value is composed of characters).
- </test>
-
- <test id="cq" for="ta-UScJfQHPPy" src="test-cases/ta-UScJfQHPPy/001/cq.wgt">
- Test the UA's ability process the width attribute.
- To pass, the widget width must be the value "123".
- </test>
-
- <test id="cw" for="ta-UScJfQHPPy" src="test-cases/ta-UScJfQHPPy/002/cw.wgt">
- Test the UA's ability process the width attribute.
- To pass, the widget width must be the numeric value 200 (resulting from rule for parsing a non-negative integer).
- </test>
-
- <test id="ce" for="ta-UScJfQHPPy" src="test-cases/ta-UScJfQHPPy/003/ce.wgt">
- Test the UA's ability process the width attribute.
- To pass, the widget width must be the numeric value 123 (resulting from rule for parsing a non-negative integer).
- </test>
-
- <test id="cr" for="ta-UScJfQHPPy" src="test-cases/ta-UScJfQHPPy/004/cr.wgt">
- Test the UA's ability process the width attribute.
- To pass, the user agent must assign some default width to the widget (the value is an empty string, hence it would be ignored).
- </test>
-
- <test id="ct" for="ta-UScJfQHPPy" src="test-cases/ta-UScJfQHPPy/005/ct.wgt">
- Test the UA's ability process the width attribute.
- To pass, the user agent must assign some default width to the widget (the value is a sequence of space characters, hence it would be ignored).
- </test>
-
- <test id="cy" for="ta-UScJfQHPPy" src="test-cases/ta-UScJfQHPPy/006/cy.wgt">
- Test the UA's ability process the width attribute.
- To pass, the user agent must ignore the value of the width attribute.
- </test>
-
- <test id="cu" for="ta-vcYJAPVEym" src="test-cases/ta-vcYJAPVEym/000/cu.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the license element.
- To pass, the widget license be the string "PASS" and license href must be the string "PASS:".
- </test>
-
- <test id="ci" for="ta-vcYJAPVEym" src="test-cases/ta-vcYJAPVEym/001/ci.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the license element.
- To pass, the widget license must be an empty string and widget license href must be ignored.
- </test>
-
- <test id="ra" for="ta-vcYJAPVEym" src="test-cases/ta-vcYJAPVEym/002/ra.wgt">
- Tests the UA's ability to ignore subsequent repetitions of the license element.
- To pass, widget license must be "PASS".
- </test>
-
- <test id="co" for="ta-vcYJAPVEym" src="test-cases/ta-vcYJAPVEym/003/co.wgt">
- Tests the UA's ability to correctly select a license element that makes use of xml:lang.
- To pass, widget license must be "PASS".
- </test>
-
- <test id="cp" for="ta-VdCEyDVSA" src="test-cases/ta-VdCEyDVSA/000/cp.wgt">
- Test the ability of the user agent to correctly apply the rule for getting text content to a description element.
- To pass, the value of the widget description must be the string "PASS".
- </test>
-
- <test id="ca" for="ta-VdCEyDVSA" src="test-cases/ta-VdCEyDVSA/001/ca.wgt">
- Test the ability of the user agent to correctly process the description element.
- To pass, the value of the widget description must be the string "PASS".
- </test>
-
- <test id="cs" for="ta-VdCEyDVSA" src="test-cases/ta-VdCEyDVSA/002/cs.wgt">
- Test the ability of the user agent to correctly process the description element.
- To pass, the value of the widget description must be an empty string.
- </test>
-
- <test id="cd" for="ta-VdCEyDVSA" src="test-cases/ta-VdCEyDVSA/003/cd.wgt">
- Test the ability of the user agent to correctly process the description element.
- To pass, the value of the widget description must be a string that corresponds to the following bytes (ASCII): 0A 09 50 0A 09 41 0A 09 53 0A 09 53
- 0A</test>
-
- <test id="x1" for="ta-VdCEyDVSA" src="test-cases/ta-VdCEyDVSA/004/x1.wgt">
- Test the ability of the user agent to correctly process localized description elements by ignoring languages it does not know (i.e., selecting the unlocalized content).
- To pass, the value of the widget description must the string "PASS".
- </test>
-
- <test id="x2" for="ta-VdCEyDVSA" src="test-cases/ta-VdCEyDVSA/005/x2.wgt">
- Test the ability of the user agent to correctly process localized description elements.
- To pass, the value of the widget description must the string "PASS".
- </test>
-
- <test id="cf" for="ta-VerEfVGeTc" src="test-cases/ta-VerEfVGeTc/000/cf.wgt">
- Test the UA's ability to process version a version attribute.
- To pass, the value of widget version must be the string "PASS".
- </test>
-
- <test id="cg" for="ta-VerEfVGeTc" src="test-cases/ta-VerEfVGeTc/001/cg.wgt">
- Test the UA's ability to process version a version attribute.
- To pass, the value of version must be an empty string (applies rule for getting a single attribute value).
- </test>
-
- <test id="ch" for="ta-VerEfVGeTc" src="test-cases/ta-VerEfVGeTc/002/ch.wgt">
- Test the UA's ability to process version a version attribute.
- To pass, the value of widget version must be the string "PASS" (applies rule for getting a single attribute value).
- </test>
-
- <test id="cj" for="ta-YUMJAPVEgI" src="test-cases/ta-YUMJAPVEgI/000/cj.wgt">
- Test the ability of the user agent to correctly apply the rule for getting text content to a license element.
- To pass, the value of the widget license must be the string "PASS".
- </test>
-
- <test id="ck" for="ta-YUMJAPVEgI" src="test-cases/ta-YUMJAPVEgI/001/ck.wgt">
- Test the ability of the user agent to correctly process the text content of a license element.
- To pass, the value of the widget license must be the string "PASS".
- </test>
-
- <test id="cl" for="ta-YUMJAPVEgI" src="test-cases/ta-YUMJAPVEgI/002/cl.wgt">
- Test the ability of the user agent to correctly process the text content of the license element.
- To pass, the value of the widget license must be an empty string.
- </test>
-
- <test id="cz" for="ta-YUMJAPVEgI" src="test-cases/ta-YUMJAPVEgI/003/cz.wgt">
- Test the ability of the user agent to correctly process the text content license element.
- To pass, the value of the widget license must a string that corresponds to the following bytes (ASCII): 0A 09 50 0A 09 41 0A 09 53 0A 09 53 0A
- </test>
-
- <test id="cx" for="ta-YUMJAPVEgI" src="test-cases/ta-YUMJAPVEgI/004/cx.wgt">
- Test the ability of the user agent to correctly process license element's href attribute when it is a file.
- To pass, the value of the widget license must be an empty string, but the license href attribute must point to the file at 'test/pass.html'.
- </test>
-
- <test id="d1" for="ta-iipTwNshRg" src="test-cases/ta-iipTwNshRg/000/d1.wgt">
- Tests the user agents ability to correctly process icon elements without a src attribute.
- To pass, the icons list will only contain icon.png
- </test>
-
- <test id="ga" for="ta-iipTwNshRg" src="test-cases/ta-iipTwNshRg/001/ga.wgt">
- Tests the user agents ability to correctly process icon elements with an empty src attribute.
- To pass, the icons list will only contain icon.png
- </test>
-
- <test id="d2" for="ta-roCaKRxZhS" src="test-cases/ta-roCaKRxZhS/000/d2.wgt">
- Tests the UA's ability to handle the situation where a path points to an icon which does not exist.
- To pass, the icons list must contain icon.png.
- </test>
-
- <test id="d3" for="ta-MFcsScFEaC" src="test-cases/ta-MFcsScFEaC/000/d3.wgt">
- Test the UA's ability to progress to Step 8 when it has nothing to process inside the widget element.
- To pass, the widget start file must be "index.htm"
- </test>
-
- <test id="gg" for="ta-ignore-unrequired-feature-with-invalid-name" src="test-cases/ta-ignore-unrequired-feature-with-invalid-name/000/gg.wgt">
- Tests the user agents ability to correctly process a feature element.
- To pass, the user agent must not contain any values in the feature list (i.e., the erronously named feature is ignored).
- </test>
-
- <test id="d4" for="ta-paWbGHyVrG" src="test-cases/ta-paWbGHyVrG/000/d4.wgt" expected="invalid">
- Tests the user agents ability to correctly process a feature element.
- To pass, the user agent must treat this widget as an invalid widget.
- </test>
-
- <test id="d5" for="ta-luyKMFABLX" src="test-cases/ta-luyKMFABLX/000/d5.wgt">
- Tests the user agents ability to correctly process a feature element.
- To pass, the user agent must not contain any values in the feature list (i.e., the unknown feature is skipped).
- </test>
-
- <test id="d6" for="ta-xlgUWUVzCY" src="test-cases/ta-xlgUWUVzCY/000/d6.wgt">
- Tests the user agent's ability to correctly process a param element.
- To pass, feature 'feature:a9bb79c1' must not have any associated parameters.
- </test>
-
- <test id="d7" for="ta-LTUJGJFCOU" src="test-cases/ta-LTUJGJFCOU/000/d7.wgt">
- Test that the user agent skips a content element with no src attribute and
- loads default start file.
- To pass, the start file must be index.htm at the root of the widget.
- </test>
-
- <test id="d8" for="ta-LTUJGJFCOU" src="test-cases/ta-LTUJGJFCOU/001/d8.wgt">
- Test that the user agent skips a content element with no src attribute and
- loads default start file.
- To pass, the start file must be index.htm at the root of the widget.
- </test>
-
- <test id="gb" for="ta-LTUJGJFCOU" src="test-cases/ta-LTUJGJFCOU/002/gb.wgt">
- Test that the user agent correctly handles a content element with an empty src attribute.
- To pass, the start file must be index.htm at the root of the widget.
- </test>
-
- <test id="d9" for="ta-LQcjNKBLUZ" src="test-cases/ta-LQcjNKBLUZ/000/d9.wgt" expected="invalid">
- Test that the user agent skips a content element that points to a non-existing file and shoudln't read the following content element.
- To pass the user agent must treat the widget as invalid.
- </test>
-
- <test id="d0" for="ta-LQcjNKBLUZ" src="test-cases/ta-LQcjNKBLUZ/001/d0.wgt">
- Test that the user agent skips a content element that points to a non-existing file.
- To pass, the start file must be index.htm
- </test>
-
- <test id="dq" for="ta-ZjcdAxFMSx" src="test-cases/ta-ZjcdAxFMSx/000/dq.wgt" expected="invalid">
- Test the UA's ability to correctly find config document.
- To pass, the user agent must treat this as an invalid widget (config.exe is not a recognized config file name)
- </test>
-
- <test id="dw" for="ta-ZjcdAxFMSx" src="test-cases/ta-ZjcdAxFMSx/001/dw.wgt" expected="invalid">
- Test the UA's ability to correctly find config document.
- To pass, the user agent must treat this as an invalid widget (CoNfIG.xml is not a recognized config file name)
- </test>
-
- <test id="dc" for="ta-paIabGIIMC" src="test-cases/ta-paIabGIIMC/000/dc.wgt">
- Test the UA's support for explicitly setting the mime type of a file using the type attribute of the content element.
- To pass, the widget start file must be index.php and start file content type must be "text/html"
- </test>
-
- <test id="dv" for="ta-paIabGIIMC" src="test-cases/ta-paIabGIIMC/001/dv.wgt" expected="invalid">
- Test the UA's support for explicitly setting the mime type of a file using the type attribute of the content element.
- To pass, the user agent must treat this as an invalid widget.
- </test>
-
- <test id="df" for="ta-rZdcMBExBX" src="test-cases/ta-rZdcMBExBX/000/df.wgt">
- Test the UA's ability to handle a feature element without a name attribute.
- To pass, the feature list must remain empty.
- </test>
-
- <test id="ha" for="ta-rZdcMBExBX" src="test-cases/ta-rZdcMBExBX/002/ha.wgt">
- Test the UA's ability to handle multiple feature elements with the same value for the name attribute, but with different param elements.
- To pass, the feature list must contain two features. Both are named 'feature:a9bb79c1'. One feature must have a parameter named "test" whose value is "pass1"
- The other feature must have a parameter named "test" whose value is "pass2" (the order in which the features appear in the feature list in not relevant).
- </test>
-
- <test id="dt" for="ta-EGkPfzCBOz" src="test-cases/ta-EGkPfzCBOz/000/dt.wgt">
- Tests the user agents to correctly handle a param element with missing name attribute.
- To pass, the feature list must contain one feature named 'feature:a9bb79c1' with no associated parameters.
- </test>
-
- <test id="dg" for="ta-EGkPfzCBOz" src="test-cases/ta-EGkPfzCBOz/001/dg.wgt">
- Tests the user agents to correctly handle a param element with missing name attribute.
- To pass, the feature list must contain one feature named 'feature:a9bb79c1' with one associated parameter whose name
- is 'PASS' and whose value is 'PASS'.
- </test>
-
- <test id="v9" for="ta-EGkPfzCBOz" src="test-cases/ta-EGkPfzCBOz/002/v9.wgt">
- Tests the user agents to correctly handle param elements that have the same value for the name attribute.
- To pass, the feature list must contain one feature named 'feature:a9bb79c1' with two associated parameters whose name
- is 'PASS' and whose value are 'value1' and 'value2'.
- </test>
-
- <test id="db" for="ta-pIffQywZin" src="test-cases/ta-pIffQywZin/000/db.wgt">
- Test that the user agent skip a content element that uses an invalid path.
- To pass, the start file must be index.htm at the root of the widget package.
- </test>
-
- <test id="dn" for="ta-FDGQBROtzW" src="test-cases/ta-FDGQBROtzW/000/dn.test">
- Tests the user agent's ability to process files with a file extension other than .wgt.
- To pass, the user agent start file of the widget must be index.htm
- </test>
-
- <test id="dm" for="ta-FDGQBROtzW" src="test-cases/ta-FDGQBROtzW/001/dm">
- Tests the user agent's ability to process files with no file extension.
- To pass, the user agent start file of the widget must be index.htm
- </test>
-
- <test id="dk" for="ta-qxLSCRCHlN" src="test-cases/ta-qxLSCRCHlN/000/dk.wgt" expected="invalid">
- Test the ability to deal with a widget with a wrong magic number.
- To pass, the user agent must treat this as an invalid widget.
- </test>
-
- <test id="dl" for="ta-uLHyIMvLwz" src="test-cases/ta-uLHyIMvLwz/000/dl.wgt" expected="invalid">
- Test the ability of the UA to verify a zip archive.
- To pass, the user agent must treat this as an invalid widget (archive is encrypted - password is test).
- </test>
-
- <test id="do" for="ta-uLHyIMvLwz" src="test-cases/ta-uLHyIMvLwz/001/split.wgt.001" expected="invalid">
- Test the ability of the UA to verify a zip archive.
- To pass, the user agent must treat this as an invalid widget (archive is spanned).
- </test>
-
- <test id="dp" for="ta-uLHyIMvLwz" src="test-cases/ta-uLHyIMvLwz/002/dp.wgt" expected="invalid">
- Test the ability of the UA to verify a zip archive.
- To pass, the user agent must treat this as an invalid widget (archive is empty).
- </test>
-
- <test id="e1" for="ta-KNiLPOKdgQ" src="test-cases/ta-KNiLPOKdgQ/000/e1.wgt">
- Tests the user agents ability to ignore orphan param elements.
- To pass, the feature feature:a9bb79c1 must not have any params associated with it.
- </test>
-
- <test id="e2" for="ta-CEGwkNQcWo" src="test-cases/ta-CEGwkNQcWo/000/e2.wgt">
- Test that a user agent correctly ignores param elements with empty name attributes.
- To pass, the feature feature:a9bb79c1 must not have any associated params.
- </test>
-
- <test id="e3" for="ta-CEGwkNQcWo" src="test-cases/ta-CEGwkNQcWo/001/e3.wgt">
- Test that a user agent correctly applies the rule for getting a single attribute value to a param element's name and value attributes.
- To pass, the feature feature:a9bb79c1 must not have any associated params.
- </test>
-
- <test id="e4" for="ta-dPOgiLQKNK" src="test-cases/ta-dPOgiLQKNK/000/e4.wgt">
- Tests the user agent's ability to correctly process a content element's encoding attribute when it is empty.
- To pass, the value of the start file encoding must be UTF-8.
- </test>
-
- <test id="e5" for="ta-dPOgiLQKNK" src="test-cases/ta-dPOgiLQKNK/001/e5.wgt">
- Tests the user agent's ability to correctly process a content element's encoding attribute when it contains the value "ISO-8859-1".
- To pass, the value of the start file encoding must be ISO-8859-1.
- </test>
-
- <test id="e6" for="ta-dPOgiLQKNK" src="test-cases/ta-dPOgiLQKNK/002/e6.wgt">
- Test that a user agent correctly applies the rule for getting a single attribute value to the content element's encoding attribute.
- To pass, the value of the start file encoding must be ISO-8859-1.
- </test>
-
-
- <test id="e7" for="ta-dPOgiLQKNK" src="test-cases/ta-dPOgiLQKNK/003/e7.wgt">
- Tests the user agent's ability to correctly process a content element's encoding attribute when it encounters a bogus encoding name.
- To pass, the value of the start file encoding must be UTF-8.
- </test>
-
- <test id="e8" for="ta-vOBaOcWfll" src="test-cases/ta-vOBaOcWfll/000/e8.wgt" expected="invalid">
- Tests the ability of the user agent to correctly handle required a feature when the feature is not supported by the UA.
- To pass, the UA must treat this as an invalid widget.
- </test>
-
- <test id="xx" for="ta-bbbbbbbbbb" src="test-cases/ta-bbbbbbbbbb/000/xx.wgt">
- Tests the ability of the user agent to correctly ignore unknown elements.
- To pass, the UA must use pass.html as the start file.
- </test>
-
- <test id="zz" for="ta-iuJHnskSHq" src="test-cases/ta-iuJHnskSHq/000/zz.wgt">
- Tests the ability of the user agent to correctly deal with an icon element
- that points to a file that is not present in the widget package.
- To pass, the icon list must be empty.
- </test>
-
- <test id="za" for="ta-iuJHnskSHq" src="test-cases/ta-iuJHnskSHq/001/za.wgt">
- Test the UAs ability to ignore unprocessable files as an icon format (fail contains garbage data).
- To pass, the user agent must behave as if "pass.png" is the only icon in the icons
- list.
- </test>
-
- <test id="zb" for="ta-iuJHnskSHq" src="test-cases/ta-iuJHnskSHq/002/zb.wgt">
- Test the UAs ability to ignore subsequent delclarations to use the same icon.
- To pass, the user agent must behave as if "locales/en/icon.png" is the only icon
- in the icons list and the icon must not have an associated width or height
- (unless it has been computed from the icon file).
- </test>
-
- <test id="zc" for="ta-iuJHnskSHq" src="test-cases/ta-iuJHnskSHq/003/zc.wgt">
- Test the UAs ability to ignore subsequent delclarations to use the same icon.
- To pass, the user agent must contain "locales/en/custom.png" as the only icon
- in the icons list and the icon must not have an associated width or height
- (unless it has been computed from the file).
- </test>
-
- <test id="ix" for="ta-eHUaPbgfKg" src="test-cases/ta-eHUaPbgfKg/000/ix.wgt">
- Test the UA's ability process the height attribute of an icon.
- To pass, the icon's height must be the value "123".
- </test>
-
- <test id="iy" for="ta-eHUaPbgfKg" src="test-cases/ta-eHUaPbgfKg/001/iy.wgt">
- Test the UA's ability process the height attribute of an icon.
- To pass, the user agent must ignore the value of the icon's height attribute (the value is composed of characters).
- </test>
-
- <test id="iz" for="ta-eHUaPbgfKg" src="test-cases/ta-eHUaPbgfKg/002/iz.wgt">
- Test the UA's ability process the height attribute of an icon.
- To pass, the icon's height must be the numeric value 100 (resulting from rule for parsing a non-negative integer).
- </test>
-
- <test id="i1" for="ta-eHUaPbgfKg" src="test-cases/ta-eHUaPbgfKg/003/i1.wgt">
- Test the UA's ability process the height attribute of an icon.
- To pass, the icon's height must be the numeric value 123 (resulting from rule for parsing a non-negative integer).
- </test>
-
- <test id="i2" for="ta-eHUaPbgfKg" src="test-cases/ta-eHUaPbgfKg/004/i2.wgt">
- Test the UA's ability process the height attribute of an icon.
- To pass, the icon's height must be ignored (the value is an empty string, hence it would be ignored).
- </test>
-
- <test id="i3" for="ta-eHUaPbgfKg" src="test-cases/ta-eHUaPbgfKg/005/i3.wgt">
- Test the UA's ability process the height attribute of an icon.
- To pass, the icon's height must be ignored (the value is a sequence of space characters, hence it would be ignored).
- </test>
-
- <test id="i4" for="ta-eHUaPbgfKg" src="test-cases/ta-eHUaPbgfKg/006/i4.wgt">
- Test the UA's ability process the height attribute of an icon.
- To pass, the icon's height must a value greater than zero.
- </test>
-
- <test id="iq" for="ta-nYAcofihvj" src="test-cases/ta-nYAcofihvj/000/iq.wgt">
- Test the UA's ability process the width attribute of an icon element.
- To pass, the icon's width must be the value "123".
- </test>
-
- <test id="i9" for="ta-nYAcofihvj" src="test-cases/ta-nYAcofihvj/001/i9.wgt">
- Test the UA's ability process the width attribute of an icon element.
- To pass, the icon's width must be the value "0" (the value is composed of characters).
- </test>
-
- <test id="iw" for="ta-nYAcofihvj" src="test-cases/ta-nYAcofihvj/002/iw.wgt">
- Test the UA's ability process the width attribute of an icon element.
- To pass, the icon's width must be the numeric value 100 (resulting from rule for parsing a non-negative integer).
- </test>
-
- <test id="ie" for="ta-nYAcofihvj" src="test-cases/ta-nYAcofihvj/003/ie.wgt">
- Test the UA's ability process the width attribute of an icon element.
- To pass, the icon's width must be the numeric value 123 (resulting from rule for parsing a non-negative integer).
- </test>
-
- <test id="ir" for="ta-nYAcofihvj" src="test-cases/ta-nYAcofihvj/004/ir.wgt">
- Test the UA's ability process the width attribute of an icon element.
- To pass, the icon's width must be ignored (the value is an empty string, hence it would be ignored).
- </test>
-
- <test id="it" for="ta-nYAcofihvj" src="test-cases/ta-nYAcofihvj/005/it.wgt">
- Test the UA's ability process the width attribute of an icon element.
- To pass, the icon's width must be ignored (the value is a sequence of space characters, hence it would be ignored).
- </test>
-
- <test id="ib" for="ta-nYAcofihvj" src="test-cases/ta-nYAcofihvj/006/ib.wgt">
- Test the UA's ability process the width attribute of an icon element.
- To pass, the icon's width must be the value "0".
- </test>
-
- <test id="z1" for="ta-aaaaaaaaaa" src="test-cases/ta-aaaaaaaaaa/000/z1.wgt">
- Test that the user agent correctly handles a charset parameter when the type attribute is present.
- To pass, the user agent must sets the start file encoding to 'ISO-8859-1' and ignore the charset parameter used in the type attribute.
- </test>
-
- <test id="z2" for="ta-aaaaaaaaaa" src="test-cases/ta-aaaaaaaaaa/001/z2.wgt">
- Test that the user agent sets the user agent can derive the start file encoding from the charset parameter in the type attribute.
- To pass, the start file encoding must be 'Windows-1252'.
- </test>
-
-
- <test id="z3" for="ta-GVVIvsdEUo" src="test-cases/ta-GVVIvsdEUo/000/z3" type="optional">
- Test the user agent's ability to get a widget over HTTP and respect the application/widget mimetype. The server from which this test is served from has been set up to label the 'test' resource as an 'application/widget'.
- To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only because of sniffing).
- </test>
-
- <test id="z4" for="ta-GVVIvsdEUo" src="test-cases/ta-GVVIvsdEUo/001/z4.html" type="optional">
- Test the user agent's ability to get a widget over HTTP and respect the 'application/widget' mimetype. The server from which this test is served from has been set up to label the 'test.html' resource as an 'application/widget'.
- To pass, a user agent must correctly process this resource as a widget because of the 'application/widget' mimetype (i.e., not only via sniffing).
- </test>
-
- <test id="z5" for="ta-GVVIvsdEUo" src="test-cases/ta-GVVIvsdEUo/002/z5.wgt" type="optional">
- Test the user agent's ability handle a widget served with a bogus mime type. The server from which this test is served from has been set up to label the 'a5.wgt' resource as an 'x-xDvaDFadAF/x-adfsdADfda'. To pass, a user agent must must treat the resource as invalid (the mime type is bogus).
- </test>
-
- <test id="viewb" for="ta-viewmodes" src="test-cases/ta-viewmodes/001/viewb.wgt">
- Test the UA's ability process the various values applicable to viewmodes attribute of the widget element.
- To pass, the viewmodes list should contain a single value "floating" if the UA supports this else empty.
- </test>
- <test id="viewf" for="ta-viewmodes" src="test-cases/ta-viewmodes/005/viewf.wgt">
- Test the UA's ability process a viewmodes attribute containing an unsupported value.
- To pass, the viewmodes list should be empty.
- </test>
- <test id="viewg" for="ta-viewmodes" src="test-cases/ta-viewmodes/006/viewg.wgt">
- Test the UA's ability process a viewmodes attribute containing multiple supported values.
- To pass, the viewmodes list should be "windowed floating maximized" if the UA supports all of these.
- </test>
- <test id="viewh" for="ta-viewmodes" src="test-cases/ta-viewmodes/007/viewh.wgt">
- Test the UA's ability process a viewmodes attribute containing supported and unsupported values.
- To pass, the viewmodes list should be "windowed floating" if the UA supports all of these.
- </test>
- <test id="viewi" for="ta-viewmodes" src="test-cases/ta-viewmodes/008/viewi.wgt">
- Test the UA's ability process an empty viewmodes attribute of the widget element.
- To pass, the viewmodes list should be empty.
- </test>
-
- <!-- i18n tests -->
-
- <test for="ta-AYLMhryBnD" id="i18nlro01" src="test-cases/i18n-lro/001/i18nlro01.wgt">
- Tests that LRO direction applies to the name element.
- To pass, the displayed value of the name element must render as "םפללחק".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro02" src="test-cases/i18n-lro/002/i18nlro02.wgt">
- Tests that LRO direction applies to the name element's short attribute.
- To pass, the displayed value of the short attribute must render as "םפללחק".
- </test>
- <test for="ta-VdCEyDVSA" id="i18nlro03" src="test-cases/i18n-lro/003/i18nlro03.wgt">
- Tests that LRO direction applies to the description element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-argMozRiC" id="i18nlro04" src="test-cases/i18n-lro/004/i18nlro04.wgt">
- Tests that LRO direction applies to the author element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nlro05" src="test-cases/i18n-lro/005/i18nlro05.wgt">
- Tests that LRO direction applies to the license element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro06" src="test-cases/i18n-lro/006/i18nlro06.wgt">
- Tests that LRO direction applies to the span element within the name element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-VdCEyDVSA" id="i18nlro07" src="test-cases/i18n-lro/007/i18nlro07.wgt">
- Tests that LRO direction applies to the span element within the description element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-argMozRiC" id="i18nlro08" src="test-cases/i18n-lro/008/i18nlro08.wgt">
- Tests that LRO direction applies to the span element within the author element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nlro09" src="test-cases/i18n-lro/009/i18nlro09.wgt">
- Tests that LRO direction applies to the span element within the license element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro10" src="test-cases/i18n-lro/010/i18nlro10.wgt">
- Tests that nested LRO and RLO directions applies within the name element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-VdCEyDVSA" id="i18nlro11" src="test-cases/i18n-lro/011/i18nlro11.wgt">
- Tests that nested LRO and RLO directions applies within the description element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-argMozRiC" id="i18nlro12" src="test-cases/i18n-lro/012/i18nlro12.wgt">
- Tests that nested LRO and RLO directions applies within the author element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nlro13" src="test-cases/i18n-lro/013/i18nlro13.wgt">
- Tests that nested LRO and RLO directions applies within the license element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro14" src="test-cases/i18n-lro/014/i18nlro14.wgt">
- Tests that LRO direction is inherited by the name element from the widget element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro15" src="test-cases/i18n-lro/015/i18nlro15.wgt">
- Tests that LRO direction is inherited by the name element's short attribute from the widget element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-VdCEyDVSA" id="i18nlro16" src="test-cases/i18n-lro/016/i18nlro16.wgt">
- Tests that LRO direction is inherited by the description element from the widget element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-argMozRiC" id="i18nlro17" src="test-cases/i18n-lro/017/i18nlro17.wgt">
- Tests that LRO direction is inherited by the author element from the widget element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nlro18" src="test-cases/i18n-lro/018/i18nlro18.wgt">
- Tests that LRO direction is inherited by the license element from the widget element.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro19" src="test-cases/i18n-lro/019/i18nlro19.wgt">
- Tests that nested LRO and LTR directions apply correctly to the name element.
- To pass, the displayed value of the name element must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro20" src="test-cases/i18n-lro/020/i18nlro20.wgt">
- Tests that nested LRO and RTL directions apply correctly to the name element.
- To pass, the displayed value of the name element must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro21" src="test-cases/i18n-lro/021/i18nlro21.wgt">
- Tests that nested LRO and LRO directions apply correctly to the name element.
- To pass, the displayed value of the name element must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nlro22" src="test-cases/i18n-lro/022/i18nlro22.wgt">
- Tests that nested LRO and RLO directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-roCaKRxZhS" id="i18nlro23" src="test-cases/i18n-lro/023/i18nlro23.wgt">
- Tests that LRO direction does not apply to the icon element's src attribute.
- To pass, the user agent must select test.png as an icon (and not 'gnp.tset').
- </test>
-
- <test for="ta-LQcjNKBLUZ" id="i18nlro26" src="test-cases/i18n-lro/026/i18nlro26.wgt">
- Tests that LRO direction does not apply to the content element's src attribute.
- To pass, the start page must be "pass.htm".
- </test>
- <test for="ta-paIabGIIMC" id="i18nlro27" src="test-cases/i18n-lro/027/i18nlro27.wgt">
- Tests that LRO direction does not apply to the content element's type attribute.
- To pass, the content element's type attribute must be unaffected by the presence of the dir attribute.
- </test>
- <test for="ta-dPOgiLQKNK" id="i18nlro28" src="test-cases/i18n-lro/028/i18nlro28.wgt">
- Tests that LRO direction does not apply to the content element's encoding attribute.
- To pass, the content element's encoding attribute must be unaffected by the presence of the dir attribute.
- </test>
- <test for="ta-rZdcMBExBX" id="i18nlro29" src="test-cases/i18n-lro/029/i18nlro29.wgt">
- Tests that LRO direction does not apply to the feature element's name attribute.
- To pass, the value of the attribute must remain "feature:a9bb79c1".
- </test>
- <test for="ta-rZdcMBExBX" id="i18nlro30" src="test-cases/i18n-lro/030/i18nlro30.wgt">
- Tests that LRO direction does not apply to the feature element's required attribute.
- To pass, the value of the required attribute must be treated as "false".
- </test>
- <test for="ta-CEGwkNQcWo" id="i18nlro31" src="test-cases/i18n-lro/031/i18nlro31.wgt">
- Tests that LRO direction does not apply to the param element's name attribute.
- To pass, the value of the param element's name attribute must remain "םפללחק".
- </test>
- <test for="ta-CEGwkNQcWo" id="i18nlro32" src="test-cases/i18n-lro/032/i18nlro32.wgt">
- Tests that LRO direction does not apply to the param element's value attribute.
- To pass, the param element's name attribute must remain "םפללחק".
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nlro33" src="test-cases/i18n-lro/033/i18nlro33.wgt">
- Tests that LRO direction does not apply to the preference element's name attribute.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nlro34" src="test-cases/i18n-lro/034/i18nlro34.wgt">
- Tests that LRO direction does not apply to the preference element's value attribute.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nlro35" src="test-cases/i18n-lro/035/i18nlro35.wgt">
- Tests that LRO direction does not apply to the preference element's readonly attribute.
- To pass, the displayed value must render as "true".
- </test>
- <test for="ta-argMozRiC" id="i18nlro36" src="test-cases/i18n-lro/036/i18nlro36.wgt">
- Tests that LRO direction does not apply to the author element's href attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
- <test for="ta-argMozRiC" id="i18nlro37" src="test-cases/i18n-lro/037/i18nlro37.wgt">
- Tests that LRO direction does not apply to the author element's email attribute.
- To pass, the displayed value must render as "םפללחק".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nlro38" src="test-cases/i18n-lro/038/i18nlro38.wgt">
- Tests that LRO direction does not apply to the license element's href attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
- <test for="ta-UScJfQHPPy" id="i18nlro39" src="test-cases/i18n-lro/039/i18nlro39.wgt">
- Tests that LRO direction does not apply to the widget element's width attribute.
- To pass, the widget element's width attribute must be "123".
- </test>
- <test for="ta-BxjoiWHaMr" id="i18nlro40" src="test-cases/i18n-lro/040/i18nlro40.wgt">
- Tests that LRO direction does not apply to the widget element's height attribute.
- To pass, the widget element's height attribute must be "123".
- </test>
- <test for="ta-RawAIWHoMs" id="i18nlro41" src="test-cases/i18n-lro/041/i18nlro41.wgt">
- Tests that LRO direction does not apply to the widget element's id attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
- <test for="ta-viewmodes" id="i18nlro43" src="test-cases/i18n-lro/043/i18nlro43.wgt">
- Tests that LRO direction does not apply to the widget element's viewmodes attribute.
- To pass, the displayed value must render as "windowed floating".
- </test>
- <test for="ta-klLDaEgJeU" id="i18nlro44" src="test-cases/i18n-lro/044/i18nlro44.wgt">
- Tests that LRO direction does not apply to the widget element's xml:lang attribute.
- To pass, the displayed value must render as "en".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr01" src="test-cases/i18n-ltr/001/i18nltr01.wgt">
- Tests that LTR direction applies to the name element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr02" src="test-cases/i18n-ltr/002/i18nltr02.wgt">
- Tests that LTR direction applies to the name element's short attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-VdCEyDVSA" id="i18nltr03" src="test-cases/i18n-ltr/003/i18nltr03.wgt">
- Tests that LTR direction applies to the description element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-argMozRiC" id="i18nltr04" src="test-cases/i18n-ltr/004/i18nltr04.wgt">
- Tests that LTR direction applies to the author element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nltr05" src="test-cases/i18n-ltr/005/i18nltr05.wgt">
- Tests that LTR direction applies to the license element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr06" src="test-cases/i18n-ltr/006/i18nltr06.wgt">
- Tests that LTR direction applies to the span element within the name element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-VdCEyDVSA" id="i18nltr07" src="test-cases/i18n-ltr/007/i18nltr07.wgt">
- Tests that LTR direction applies to the span element within the description element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-argMozRiC" id="i18nltr08" src="test-cases/i18n-ltr/008/i18nltr08.wgt">
- Tests that LTR direction applies to the span element within the author element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nltr09" src="test-cases/i18n-ltr/009/i18nltr09.wgt">
- Tests that LTR direction applies to the span element within the license element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr10" src="test-cases/i18n-ltr/010/i18nltr10.wgt">
- Tests that nested LTR and RTL directions applies within the name element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-VdCEyDVSA" id="i18nltr11" src="test-cases/i18n-ltr/011/i18nltr11.wgt">
- Tests that nested LTR and RTL directions applies within the description element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-argMozRiC" id="i18nltr12" src="test-cases/i18n-ltr/012/i18nltr12.wgt">
- Tests that nested LTR and RTL directions applies within the author element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nltr13" src="test-cases/i18n-ltr/013/i18nltr13.wgt">
- Tests that nested LTR and RTL directions applies within the license element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr14" src="test-cases/i18n-ltr/014/i18nltr14.wgt">
- Tests that LTR direction is inherited by the name element from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr15" src="test-cases/i18n-ltr/015/i18nltr15.wgt">
- Tests that LTR direction is inherited by the name element's short attribute from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-VdCEyDVSA" id="i18nltr16" src="test-cases/i18n-ltr/016/i18nltr16.wgt">
- Tests that LTR direction is inherited by the description element from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-argMozRiC" id="i18nltr17" src="test-cases/i18n-ltr/017/i18nltr17.wgt">
- Tests that LTR direction is inherited by the author element from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nltr18" src="test-cases/i18n-ltr/018/i18nltr18.wgt">
- Tests that LTR direction is inherited by the license element from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr19" src="test-cases/i18n-ltr/019/i18nltr19.wgt">
- Tests that nested LTR directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr20" src="test-cases/i18n-ltr/020/i18nltr20.wgt">
- Tests that nested LTR and RTL directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr21" src="test-cases/i18n-ltr/021/i18nltr21.wgt">
- Tests that nested LTR and LRO directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nltr22" src="test-cases/i18n-ltr/022/i18nltr22.wgt">
- Tests that nested LTR and RLO directions apply correctly.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-roCaKRxZhS" id="i18nltr23" src="test-cases/i18n-ltr/023/i18nltr23.wgt">
- Tests that LTR direction does not apply to the icon element's src attribute.
- To pass, the user agent must select test.png as an icon (and not 'gnp.tset').
- </test>
-
-
- <test for="ta-LQcjNKBLUZ" id="i18nltr26" src="test-cases/i18n-ltr/026/i18nltr26.wgt">
- Tests that LTR direction does not apply to the content element's src attribute.
- To pass, the start page must be "pass.htm".
- </test>
- <test for="ta-paIabGIIMC" id="i18nltr27" src="test-cases/i18n-ltr/027/i18nltr27.wgt">
- Tests that LTR direction does not apply to the content element's type attribute.
- To pass, the content element's type attribute must be unaffected by the presence of the dir attribute. </test>
- <test for="ta-dPOgiLQKNK" id="i18nltr28" src="test-cases/i18n-ltr/028/i18nltr28.wgt">
- Tests that LTR direction does not apply to the content element's encoding attribute.
- To pass, the content element's encoding attribute must be unaffected by the presence of the dir attribute.</test>
- <test for="ta-rZdcMBExBX" id="i18nltr29" src="test-cases/i18n-ltr/029/i18nltr29.wgt">
- Tests that LTR direction does not apply to the feature element's name attribute.
- To pass, the displayed value must be treated as "feature:a9bb79c1".
- </test>
- <test for="ta-rZdcMBExBX" id="i18nltr30" src="test-cases/i18n-ltr/030/i18nltr30.wgt">
- Tests that LTR direction does not apply to the feature element's required attribute.
- To pass, the value of the required attribute must be treated as "false".
- </test>
- <test for="ta-CEGwkNQcWo" id="i18nltr31" src="test-cases/i18n-ltr/031/i18nltr31.wgt">
- Tests that LTR direction does not apply to the param element's name attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-CEGwkNQcWo" id="i18nltr32" src="test-cases/i18n-ltr/032/i18nltr32.wgt">
- Tests that LTR direction does not apply to the param element's value attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nltr33" src="test-cases/i18n-ltr/033/i18nltr33.wgt">
- Tests that LTR direction does not apply to the preference element's name attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nltr34" src="test-cases/i18n-ltr/034/i18nltr34.wgt">
- Tests that LTR direction does not apply to the preference element's value attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nltr35" src="test-cases/i18n-ltr/035/i18nltr35.wgt">
- Tests that LTR direction does not apply to the preference element's readonly attribute.
- To pass, the displayed value must treated as "true".
- </test>
- <test for="ta-argMozRiC" id="i18nltr36" src="test-cases/i18n-ltr/036/i18nltr36.wgt">
- Tests that LTR direction does not apply to the author element's href attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
- <test for="ta-argMozRiC" id="i18nltr37" src="test-cases/i18n-ltr/037/i18nltr37.wgt">
- Tests that LTR direction does not apply to the author element's email attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nltr38" src="test-cases/i18n-ltr/038/i18nltr38.wgt">
- Tests that LTR direction does not apply to the license element's href attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
- <test for="ta-UScJfQHPPy" id="i18nltr39" src="test-cases/i18n-ltr/039/i18nltr39.wgt">
- Tests that LTR direction does not apply to the widget element's width attribute.
- To pass, the displayed value must render as "123".
- </test>
- <test for="ta-BxjoiWHaMr" id="i18nltr40" src="test-cases/i18n-ltr/040/i18nltr40.wgt">
- Tests that LTR direction does not apply to the widget element's height attribute.
- To pass, the displayed value must render as "123".
- </test>
- <test for="ta-RawAIWHoMs" id="i18nltr41" src="test-cases/i18n-ltr/041/i18nltr41.wgt">
- Tests that LTR direction does not apply to the widget element's id attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
-
- <test for="ta-viewmodes" id="i18nltr43" src="test-cases/i18n-ltr/043/i18nltr43.wgt">
- Tests that LTR direction does not apply to the widget element's viewmodes attribute.
- To pass, the displayed value must render as "windowed floating".
- </test>
- <test for="ta-klLDaEgJeU" id="i18nltr44" src="test-cases/i18n-ltr/044/i18nltr44.wgt">
- Tests that LTR direction does not apply to the widget element's xml:lang attribute.
- To pass, the displayed value must render as "en".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo01" src="test-cases/i18n-rlo/001/i18nrlo01.wgt">
- Tests that RLO direction applies to the name element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo02" src="test-cases/i18n-rlo/002/i18nrlo02.wgt">
- Tests that RLO direction applies to the name element's short attribute.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-VdCEyDVSA" id="i18nrlo03" src="test-cases/i18n-rlo/003/i18nrlo03.wgt">
- Tests that RLO direction applies to the description element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-argMozRiC" id="i18nrlo04" src="test-cases/i18n-rlo/004/i18nrlo04.wgt">
- Tests that RLO direction applies to the author element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrlo05" src="test-cases/i18n-rlo/005/i18nrlo05.wgt">
- Tests that RLO direction applies to the license element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo06" src="test-cases/i18n-rlo/006/i18nrlo06.wgt">
- Tests that RLO direction applies to the span element within the name element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-VdCEyDVSA" id="i18nrlo07" src="test-cases/i18n-rlo/007/i18nrlo07.wgt">
- Tests that RLO direction applies to the span element within the description element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-argMozRiC" id="i18nrlo08" src="test-cases/i18n-rlo/008/i18nrlo08.wgt">
- Tests that RLO direction applies to the span element within the author element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrlo09" src="test-cases/i18n-rlo/009/i18nrlo09.wgt">
- Tests that RLO direction applies to the span element within the license element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo10" src="test-cases/i18n-rlo/010/i18nrlo10.wgt">
- Tests that nested RLO and LRO directions applies within the name element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-VdCEyDVSA" id="i18nrlo11" src="test-cases/i18n-rlo/011/i18nrlo11.wgt">
- Tests that nested RLO and LRO directions applies within the description element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-argMozRiC" id="i18nrlo12" src="test-cases/i18n-rlo/012/i18nrlo12.wgt">
- Tests that nested RLO and LRO directions applies within the author element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrlo13" src="test-cases/i18n-rlo/013/i18nrlo13.wgt">
- Tests that nested RLO and LRO directions applies within the license element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo14" src="test-cases/i18n-rlo/014/i18nrlo14.wgt">
- Tests that RLO direction is inherited by the name element from the widget element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo15" src="test-cases/i18n-rlo/015/i18nrlo15.wgt">
- Tests that RLO direction is inherited by the name element's short attribute from the widget element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-VdCEyDVSA" id="i18nrlo16" src="test-cases/i18n-rlo/016/i18nrlo16.wgt">
- Tests that RLO direction is inherited by the description element from the widget element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-argMozRiC" id="i18nrlo17" src="test-cases/i18n-rlo/017/i18nrlo17.wgt">
- Tests that RLO direction is inherited by the author element from the widget element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrlo18" src="test-cases/i18n-rlo/018/i18nrlo18.wgt">
- Tests that RLO direction is inherited by the license element from the widget element.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo19" src="test-cases/i18n-rlo/019/i18nrlo19.wgt">
- Tests that nested RLO and LTR directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo20" src="test-cases/i18n-rlo/020/i18nrlo20.wgt">
- Tests that nested RLO and RTL directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo21" src="test-cases/i18n-rlo/021/i18nrlo21.wgt">
- Tests that nested RLO and LRO directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrlo22" src="test-cases/i18n-rlo/022/i18nrlo22.wgt">
- Tests that nested RLO directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-roCaKRxZhS" id="i18nrlo23" src="test-cases/i18n-rlo/023/i18nrlo23.wgt">
- Tests that RLO direction does not apply to the icon element's src attribute.
- To pass, the icon must be "test.png".
- </test>
-
-
- <test for="ta-LQcjNKBLUZ" id="i18nrlo26" src="test-cases/i18n-rlo/026/i18nrlo26.wgt">
- Tests that RLO direction does not apply to the content element's src attribute.
- To pass, the start page must be "pass.htm".
- </test>
- <test for="ta-paIabGIIMC" id="i18nrlo27" src="test-cases/i18n-rlo/027/i18nrlo27.wgt">
- Tests that RLO direction does not apply to the content element's type attribute.
- To pass, the content element's type attribute must be unaffected by the presence of the dir attribute. </test>
- <test for="ta-dPOgiLQKNK" id="i18nrlo28" src="test-cases/i18n-rlo/028/i18nrlo28.wgt">
- Tests that RLO direction does not apply to the content element's encoding attribute.
- To pass, the displayed value must remain as "ISO-8859-1". </test>
- <test for="ta-rZdcMBExBX" id="i18nrlo29" src="test-cases/i18n-rlo/029/i18nrlo29.wgt">
- Tests that RLO direction does not apply to the feature element's name attribute.
- To pass, the displayed value must render as "feature:a9bb79c1".
- </test>
- <test for="ta-rZdcMBExBX" id="i18nrlo30" src="test-cases/i18n-rlo/030/i18nrlo30.wgt">
- Tests that RLO direction does not apply to the feature element's required attribute.
- To pass, the value of the required attribute must be treated as "false".
- </test>
- <test for="ta-CEGwkNQcWo" id="i18nrlo31" src="test-cases/i18n-rlo/031/i18nrlo31.wgt">
- Tests that RLO direction does not apply to the param element's name attribute.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-CEGwkNQcWo" id="i18nrlo32" src="test-cases/i18n-rlo/032/i18nrlo32.wgt">
- Tests that RLO direction does not apply to the param element's value attribute.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nrlo33" src="test-cases/i18n-rlo/033/i18nrlo33.wgt">
- Tests that RLO direction does not apply to the preference element's name attribute.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nrlo34" src="test-cases/i18n-rlo/034/i18nrlo34.wgt">
- Tests that RLO direction does not apply to the preference element's value attribute.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nrlo35" src="test-cases/i18n-rlo/035/i18nrlo35.wgt">
- Tests that RLO direction does not apply to the preference element's readonly attribute.
- To pass, the value must be treated as "true".
- </test>
- <test for="ta-argMozRiC" id="i18nrlo36" src="test-cases/i18n-rlo/036/i18nrlo36.wgt">
- Tests that RLO direction does not apply to the author element's href attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
- <test for="ta-argMozRiC" id="i18nrlo37" src="test-cases/i18n-rlo/037/i18nrlo37.wgt">
- Tests that RLO direction does not apply to the author element's email attribute.
- To pass, the displayed value must render as "PASSED".
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrlo38" src="test-cases/i18n-rlo/038/i18nrlo38.wgt">
- Tests that RLO direction does not apply to the license element's href attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
- <test for="ta-UScJfQHPPy" id="i18nrlo39" src="test-cases/i18n-rlo/039/i18nrlo39.wgt">
- Tests that RLO direction does not apply to the widget element's width attribute.
- To pass, the displayed value must render as "123".
- </test>
- <test for="ta-BxjoiWHaMr" id="i18nrlo40" src="test-cases/i18n-rlo/040/i18nrlo40.wgt">
- Tests that RLO direction does not apply to the widget element's height attribute.
- To pass, the displayed value must render as "123".
- </test>
- <test for="ta-RawAIWHoMs" id="i18nrlo41" src="test-cases/i18n-rlo/041/i18nrlo41.wgt">
- Tests that RLO direction does not apply to the widget element's id attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
-
-
- <test for="ta-viewmodes" id="i18nrtl43" src="test-cases/i18n-rtl/043/i18nrtl43.wgt">
- Tests that RTL direction does not apply to the widget element's viewmodes attribute.
- To pass, the widget element's viewmodes attribute must remain "windowed floating".
- </test>
- <test for="ta-klLDaEgJeU" id="i18nrtl44" src="test-cases/i18n-rtl/044/i18nrtl44.wgt">
- Tests that RTL direction does not apply to the widget element's xml:lang attribute.
- To pass, the widget element's xml:lang attribute must remain as "en".
- </test>
-
- <test for="ta-viewmodes" id="i18nrlo43" src="test-cases/i18n-rlo/043/i18nrlo43.wgt">
- Tests that RLO direction does not apply to the widget element's viewmodes attribute.
- To pass, the displayed value must render as "windowed floating".
- </test>
- <test for="ta-klLDaEgJeU" id="i18nrlo44" src="test-cases/i18n-rlo/044/i18nrlo44.wgt">
- Tests that RLO direction does not apply to the widget element's xml:lang attribute.
- To pass, the displayed value must render as "en".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl01" src="test-cases/i18n-rtl/001/i18nrtl01.wgt">
- Tests that RTL direction applies to the name element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl02" src="test-cases/i18n-rtl/002/i18nrtl02.wgt">
- Tests that RTL direction applies to the name element's short attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-VdCEyDVSA" id="i18nrtl03" src="test-cases/i18n-rtl/003/i18nrtl03.wgt">
- Tests that RTL direction applies to the description element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-argMozRiC" id="i18nrtl04" src="test-cases/i18n-rtl/004/i18nrtl04.wgt">
- Tests that RTL direction applies to the author element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrtl05" src="test-cases/i18n-rtl/005/i18nrtl05.wgt">
- Tests that RTL direction applies to the license element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl06" src="test-cases/i18n-rtl/006/i18nrtl06.wgt">
- Tests that RTL direction applies to the span element within the name element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-VdCEyDVSA" id="i18nrtl07" src="test-cases/i18n-rtl/007/i18nrtl07.wgt">
- Tests that RTL direction applies to the span element within the description element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-argMozRiC" id="i18nrtl08" src="test-cases/i18n-rtl/008/i18nrtl08.wgt">
- Tests that RTL direction applies to the span element within the author element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrtl09" src="test-cases/i18n-rtl/009/i18nrtl09.wgt">
- Tests that RTL direction applies to the span element within the license element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl10" src="test-cases/i18n-rtl/010/i18nrtl10.wgt">
- Tests that nested RTL and RTL directions applies within the name element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-VdCEyDVSA" id="i18nrtl11" src="test-cases/i18n-rtl/011/i18nrtl11.wgt">
- Tests that nested RTL and RTL directions applies within the description element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-argMozRiC" id="i18nrtl12" src="test-cases/i18n-rtl/012/i18nrtl12.wgt">
- Tests that nested RTL and RTL directions applies within the author element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrtl13" src="test-cases/i18n-rtl/013/i18nrtl13.wgt">
- Tests that nested RTL and RTL directions applies within the license element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl14" src="test-cases/i18n-rtl/014/i18nrtl14.wgt">
- Tests that RTL direction is inherited by the name element from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl15" src="test-cases/i18n-rtl/015/i18nrtl15.wgt">
- Tests that RTL direction is inherited by the name element's short attribute from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-VdCEyDVSA" id="i18nrtl16" src="test-cases/i18n-rtl/016/i18nrtl16.wgt">
- Tests that RTL direction is inherited by the description element from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-argMozRiC" id="i18nrtl17" src="test-cases/i18n-rtl/017/i18nrtl17.wgt">
- Tests that RTL direction is inherited by the author element from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrtl18" src="test-cases/i18n-rtl/018/i18nrtl18.wgt">
- Tests that RTL direction is inherited by the license element from the widget element.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl19" src="test-cases/i18n-rtl/019/i18nrtl19.wgt">
- Tests that nested RTL and LTR directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl20" src="test-cases/i18n-rtl/020/i18nrtl20.wgt">
- Tests that nested RTL directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl21" src="test-cases/i18n-rtl/021/i18nrtl21.wgt">
- Tests that nested RTL and LRO directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-AYLMhryBnD" id="i18nrtl22" src="test-cases/i18n-rtl/022/i18nrtl22.wgt">
- Tests that nested RTL and RLO directions apply correctly to the name element.
- To pass, the displayed value must render as "< PASSED -->".
- </test>
- <test for="ta-roCaKRxZhS" id="i18nrtl23" src="test-cases/i18n-rtl/023/i18nrtl23.wgt">
- Tests that RTL direction does not apply to the icon element's src attribute.
- To pass, the user agent must select test.png as an icon (and not 'gnp.tset').
- </test>
-
-
- <test for="ta-LQcjNKBLUZ" id="i18nrtl26" src="test-cases/i18n-rtl/026/i18nrtl26.wgt">
- Tests that RTL direction does not apply to the content element's src attribute.
- To pass, the start page must be "pass.htm".
- </test>
- <test for="ta-paIabGIIMC" id="i18nrtl27" src="test-cases/i18n-rtl/027/i18nrtl27.wgt">
- Tests that RTL direction does not apply to the content element's type attribute.
- To pass, the content element's type attribute must be unaffected by the presence of the dir attribute. </test>
- <test for="ta-dPOgiLQKNK" id="i18nrtl28" src="test-cases/i18n-rtl/028/i18nrtl28.wgt">
- Tests that RTL direction does not apply to the content element's encoding attribute.
- To pass, the content element's encoding attribute must be unaffected by the presence of the dir attribute.
- </test>
- <test for="ta-rZdcMBExBX" id="i18nrtl29" src="test-cases/i18n-rtl/029/i18nrtl29.wgt">
- Tests that RTL direction does not apply to the feature element's name attribute.
- To pass, the displayed value must render as "feature:a9bb79c1".
- </test>
- <test for="ta-rZdcMBExBX" id="i18nrtl30" src="test-cases/i18n-rtl/030/i18nrtl30.wgt">
- Tests that RTL direction does not apply to the feature element's required attribute.
- To pass, the value of the required attribute must be treated as "false".
- </test>
- <test for="ta-CEGwkNQcWo" id="i18nrtl31" src="test-cases/i18n-rtl/031/i18nrtl31.wgt">
- Tests that RTL direction does not apply to the param element's name attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-CEGwkNQcWo" id="i18nrtl32" src="test-cases/i18n-rtl/032/i18nrtl32.wgt">
- Tests that RTL direction does not apply to the param element's value attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nrtl33" src="test-cases/i18n-rtl/033/i18nrtl33.wgt">
- Tests that RTL direction does not apply to the preference element's name attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nrtl34" src="test-cases/i18n-rtl/034/i18nrtl34.wgt">
- Tests that RTL direction does not apply to the preference element's value attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-DwhJBIJRQN" id="i18nrtl35" src="test-cases/i18n-rtl/035/i18nrtl35.wgt">
- Tests that RTL direction does not apply to the preference element's readonly attribute.
- To pass, the displayed value must render as "true".
- </test>
- <test for="ta-argMozRiC" id="i18nrtl36" src="test-cases/i18n-rtl/036/i18nrtl36.wgt">
- Tests that RTL direction does not apply to the author element's href attribute.
- To pass, the displayed value must render as "http://widget.example.org/".
- </test>
- <test for="ta-argMozRiC" id="i18nrtl37" src="test-cases/i18n-rtl/037/i18nrtl37.wgt">
- Tests that RTL direction does not apply to the author element's email attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
- <test for="ta-YUMJAPVEgI" id="i18nrtl38" src="test-cases/i18n-rtl/038/i18nrtl38.wgt">
- Tests that RTL direction does not apply to the license element's href attribute.
- To pass, the license element's href attribute must remain as "http://widget.example.org/".
- </test>
- <test for="ta-UScJfQHPPy" id="i18nrtl39" src="test-cases/i18n-rtl/039/i18nrtl39.wgt">
- Tests that RTL direction does not apply to the widget element's width attribute.
- To pass, the widget element's width attribute must remain as "123".
- </test>
- <test for="ta-BxjoiWHaMr" id="i18nrtl40" src="test-cases/i18n-rtl/040/i18nrtl40.wgt">
- Tests that RTL direction does not apply to the widget element's height attribute.
- To pass, the widget element's height attribute must remain as "123".
- </test>
- <test for="ta-RawAIWHoMs" id="i18nrtl41" src="test-cases/i18n-rtl/041/i18nrtl41.wgt">
- Tests that RTL direction does not apply to the widget element's id attribute.
- To pass, the widget element's id attribute value must be "http://widget.example.org/".
- </test>
- <test for="ta-VerEfVGeTc" id="i18nlro42" src="test-cases/i18n-lro/042/i18nlro42.wgt">
- Tests that LRO direction applies to the widget element's version attribute.
- To pass, the displayed value must render as "םפללחק".
- </test>
-
- <test for="ta-VerEfVGeTc" id="i18nltr42" src="test-cases/i18n-ltr/042/i18nltr42.wgt">
- Tests that LTR direction applies to the widget element's version attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
-
- <test for="ta-VerEfVGeTc" id="i18nrlo42" src="test-cases/i18n-rlo/042/i18nrlo42.wgt">
- Tests that RLO direction applies to the widget element's version attribute.
- To pass, the displayed value must render as "PASSED".
- </test>
-
- <test for="ta-VerEfVGeTc" id="i18nrtl42" src="test-cases/i18n-rtl/042/i18nrtl42.wgt">
- Tests that RTL direction applies to the widget element's version attribute.
- To pass, the displayed value must render the arrow pointing to the right.
- </test>
-
- <test for="ta-defaultlocale-ignore" id="dlocignore01" src="test-cases/ta-defaultlocale-ignore/ta-de-000.wgt">
- Tests that an empty defautLocale attribute is ignored.
- To pass, the locales list should not contain an additional entry than the default locales list of the UA.
- </test>
-
- <test for="ta-defaultlocale-ignore" id="dlocignore02" src="test-cases/ta-defaultlocale-ignore/ta-de-001.wgt">
- Tests that leading and trailing spaces on defautLocale attribute are ignored.
- To pass, the locales list should not contain the string 'en-in' as the second last choice
- when the UA locale preference is 'en-us'.
- </test>
-
- <test for="ta-defaultlocale-ignore" id="dlocignore03" src="test-cases/ta-defaultlocale-ignore/ta-de-002.wgt">
- Tests that an invalid locale tag for defautLocale attribute is ignored.
- To pass, the specified value should not be added to the locales list of the UA.
- </test>
-
- <test for="ta-defaultlocale-ignore" id="dlocignore04" src="test-cases/ta-defaultlocale-ignore/ta-de-003.wgt">
- Tests that a locale tag already part of the UA's locales list is ignored when it is repeated for defautLocale attribute.
- To pass, the specified value should not be added twice to the locales list of the UA.
- </test>
-
- <test for="ta-defaultlocale-ignore" id="dlocignore05" src="test-cases/ta-defaultlocale-ignore/ta-de-004.wgt">
- Tests that a locale tag of two components is not split and only one value is added to locales list of the UA.
- To pass, the value 'en-us' should be part of the locales list at last but one position. (This test need to be done with a non-EN locale for clarity)
- </test>
-
- <test for="ta-defaultlocale-process" id="dlocuse01" src="test-cases/ta-defaultlocale-usage/ta-de-000.wgt">
- Tests that content from the defaultlocale folder is used when specific localised content is not found.
- To pass, the index.html should say PASS. (Note: ensure that 'en-gb' is not in the default locales list of the UA before testing.)
- </test>
-
- <test for="ta-defaultlocale-process" id="dlocuse02" src="test-cases/ta-defaultlocale-usage/ta-de-001.wgt">
- Tests that an element with a matching xml:lang as that of the defaultlocale is used when specific localised content is not found.
- To pass, the widget name should be PASS. (Note: ensure that 'en-gb' is not in the locales list of the UA before testing.)
- </test>
-
- <test for="ta-defaultlocale-process" id="dlocuse03" src="test-cases/ta-defaultlocale-usage/ta-de-002.wgt">
- Tests that defaultlocale is not used when specific localised content is already available.
- To pass, the widget name should be PASS. (Note: ensure that 'en-gb' is not in the locales list of the UA before testing and 'en-in' is the preferred locale.)
- </test>
-
-</testsuite>
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file main.cpp
- * @author Przemyslaw Dobrowolski (p.dobrowolsk@samsung.com)
- * @version 1.0
- * @brief This file is the implementation file of main
- */
-#include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
-#include <dpl/wrt-dao-ro/WrtDatabase.h>
-
-#include <string>
-
-#include <dpl/localization/localization_utils.h>
-
-int main (int argc, char *argv[])
-{
- WrtDB::WrtDatabase::attachToThread();
- LogInfo("Starting tests");
- int status =
- DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
- WrtDB::WrtDatabase::detachFromThread();
- return status;
-}
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Pawel Sikorski (p.sikorski@samsung.com)
-# @version 1.0
-# @brief
-#
-SET(TARGET_WARP_TEST "wrt-tests-warp")
-
-SET(WARPIRI_TESTS_SOURCES
- ${PROJECT_SOURCE_DIR}/tests/warp_tests/warp_iri_tests.cpp
- ${PROJECT_SOURCE_DIR}/tests/warp_tests/TestCases.cpp
- ${PROJECT_SOURCE_DIR}/tests/warp_tests/WarpIriTestBase.cpp
- )
-
-WRT_TEST_BUILD(${TARGET_WARP_TEST} ${WARPIRI_TESTS_SOURCES})
-WRT_TEST_INSTALL(${TARGET_WARP_TEST})
-
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/warp_tests/test-cases/bondiAA.wgt
- ${PROJECT_SOURCE_DIR}/tests/warp_tests/test-cases/access_info.wgt
- DESTINATION
- /opt/apps/widget/user/tests
- )
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This file have been implemented in compliance with W3C WARP SPEC.
- * but there are some patent issue between W3C WARP SPEC and APPLE.
- * so if you want to use this file, refer to the README file in root directory
- */
-#include <dpl/test/test_runner.h>
-#include <WarpIriTestBase.h>
-
-RUNNER_TEST(test01_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/**
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("http://pogoda.opet.pl:80/"), "IRI is failed");
-}
-
-RUNNER_TEST(test02_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/**
- * start test
- */
- test.StartTest();
-/*
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/*
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("https://facebook.pl:80/"), "IRI is failed");
-}
-
-RUNNER_TEST(test03_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/**
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("https://pl.facebook.pl:80/")==false, "IRI is failed");
-}
-
-RUNNER_TEST(test04_iri)
-{
-/**
-* create WarpIriTestBase with bondiAA.wgt
-*/
- WarpIriTestBase test("bondiAA.wgt");
-/**
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("https://facebook.pl:80/costam.html/"), "IRI is failed");
-}
-
-RUNNER_TEST(test05_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/**
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("http://interia.pl/"), "IRI is failed");
-}
-
-RUNNER_TEST(test06_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/**
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("https://wp.pl/"), "IRI is failed");
-}
-
-RUNNER_TEST(test07_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/**
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("ftp://mftp.pl/"), "IRI is failed");
-}
-
-RUNNER_TEST(test08_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/*
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("ftpp://mftp.pl/")==false, "IRI is failed");
-}
-
-RUNNER_TEST(test09_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/*
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("ftp://mftp.pl:4332/")==false, "IRI is failed");
-}
-
-RUNNER_TEST(test10_iri)
-{
-/**
- * create WarpIriTestBase with bondiAA.wgt
- */
- WarpIriTestBase test("bondiAA.wgt");
-/*
- * start test
- */
- test.StartTest();
-/**
- * display information about status installing the widget
- */
- test.CheckIsValid();
-/**
- * checking IRI
- */
- RUNNER_ASSERT_MSG( test.CheckIriIsValid("ftpd://mftp.pl:32/")==false, "IRI is failed");
-}
-
-RUNNER_TEST(test11_warp_test)
-{
- std::string strWidgetPath = std::string("access_info.wgt");
- WarpIriTestBase test(strWidgetPath);
-
- test.StartTest();
- test.CheckIsValid();
- WrtDB::WidgetAccessInfoList accessList;
- WrtDB::WidgetAccessInfo info;
- info.strIRI = DPL::FromASCIIString("http://onet.pl");
- info.bSubDomains = true;
- accessList.push_back(info);
-
- info.strIRI = DPL::FromASCIIString("http://www.wp.pl/*");
- info.bSubDomains = false;
- // commented out intentionally -> iri verification should reject "http://www.wp.pl/*"
- //accessList.push_back(info);
-
- test.CheckAccessInfoList(accessList);
-}
-
-RUNNER_TEST(test12_warp_test)
-{
- std::string strWidgetPath = std::string("access_info.wgt");
- WarpIriTestBase test(strWidgetPath);
-
- test.StartTest();
- test.CheckIsValid();
-
- RUNNER_ASSERT_MSG (test.CheckIriAccessStatus("file:///opt/dbspace/.wrt.db"), "Access check failed");
-}
-
-RUNNER_TEST(test13_warp_test)
-{
- std::string strWidgetPath = std::string("access_info.wgt");
- WarpIriTestBase test(strWidgetPath);
-
- test.StartTest();
- test.CheckIsValid();
-
- RUNNER_ASSERT_MSG (test.CheckIriAccessStatus("http://onet.pl/index.html"), "Access check failed");
-}
-
-RUNNER_TEST(test14_warp_test)
-{
- std::string strWidgetPath = std::string("access_info.wgt");
- WarpIriTestBase test(strWidgetPath);
-
- test.StartTest();
- test.CheckIsValid();
-
- RUNNER_ASSERT_MSG (!test.CheckIriAccessStatus("http://wp.pl/index.html"), "Access check failed");
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * This file have been implemented in compliance with W3C WARP SPEC.
- * but there are some patent issue between W3C WARP SPEC and APPLE.
- * so if you want to use this file, refer to the README file in root directory
- */
-#include <algorithm>
-
-#include <dpl/log/log.h>
-#include <dpl/test/test_runner.h>
-
-#include <WarpIriTestBase.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <view_logic.h>
-#include <loop_control.h>
-#include <widget_controller.h>
-
-#include <widget_deserialize_model.h>
-#include <widget_localize_model.h>
-
-
-using namespace LoopControl;
-using namespace WrtDB;
-
-
-std::string MsgFromError(Jobs::WidgetInstall::Exceptions::Type errorType)
-{
-/**
- * returns the appropriate type of exception
- */
- switch(errorType)
- {
- case Jobs::WidgetInstall::Exceptions::Success: return "Success";
- case Jobs::WidgetInstall::Exceptions::ErrorInvalidWidgetPackage: return "WrongWidgetPackage";
- case Jobs::WidgetInstall::Exceptions::ErrorWidgetDoesNotExist: return "WidgetNotExists";
- case Jobs::WidgetInstall::Exceptions::ErrorFactoryWidget: return "FactoryWidget";
- case Jobs::WidgetInstall::Exceptions::ErrorAreadyUninstalling: return "AreadyUninstalling";
- case Jobs::WidgetInstall::Exceptions::ErrorOutOfDiskSpace: return "NoSpace";
- case Jobs::WidgetInstall::Exceptions::ErrorInvalidPackage: return "InvalidCertificate";
- case Jobs::WidgetInstall::Exceptions::ErrorAlreadyInstalled: return "AlreadyInstalledErr";
- case Jobs::WidgetInstall::Exceptions::ErrorInternal: return "Internal";
- case Jobs::WidgetInstall::Exceptions::ErrorUnknown: return "Unknown";
- default: return "Strange One";
- }
-}
-
-WarpIriTestBase::~WarpIriTestBase()
-{
- LogDebug("Finishing test case");
-
- if (error == Jobs::WidgetInstall::Exceptions::Success)
- {
- LogDebug("Uninstalling widget " << widgetHandle);
- CONTROLLER_POST_EVENT(InstallerController,
- InstallerControllerEvents::UninstallWidgetEvent(widgetHandle,
- WidgetUninstallationStruct (&WarpIriTestBase::uninstall_status_callback, NULL, this)));
-/**
- * start wrt loop
- */
- wrt_start_loop();
- }
-
- LogDebug("deleting dao");
- LogDebug("Finished");
-}
-
-void WarpIriTestBase::install_status_callback (
- void* _This,
- WidgetHandle widgetHandle,
- Jobs::WidgetInstall::Exceptions::Type error)
-{
- LogInfo("InstallStatusCallbackCalled");
- WarpIriTestBase* This = static_cast<WarpIriTestBase*>(_This);
- This->widgetHandle = widgetHandle;
- This->error = error;
-
- if (!error)
- {
- This->model = Domain::deserializeWidgetModel(widgetHandle);
- if (!This->model)
- {
- LogError("model could not be obtained");
- RUNNER_ASSERT_MSG(false, "Unable to find for supplied widget handle matching widget model!");
- }
- else
- {
- Domain::localizeWidgetModel(This->model);
- }
- }
-
- wrt_end_loop();
-}
-
-void WarpIriTestBase::uninstall_status_callback (
- void* _This,
- WidgetHandle widgetHandle,
- Jobs::WidgetUninstall::Exceptions::Type error)
-{
- LogDebug("StatusCallbackCalled");
- WarpIriTestBase* This = static_cast<WarpIriTestBase*>(_This);
- This->widgetHandle = widgetHandle;
-// This->error = error;
- if (error != Jobs::WidgetUninstall::Exceptions::Success) LogWarning("Error during uninstall happened: ignoring");
-/**
- * end wrt loop
- */
- wrt_end_loop();
-}
-
-void WarpIriTestBase::StartTest()
-{
- CONTROLLER_POST_EVENT(InstallerController,
- InstallerControllerEvents::InstallWidgetEvent(widgetPath,
- WidgetInstallationStruct(&WarpIriTestBase::install_status_callback, NULL, this, WidgetUpdateMode::PolicyNeverUpdate)));
-/**
- * start wrt loop
- */
- wrt_start_loop();
-}
-
-//KW void WarpIriTestBase::CheckIsNotValid()
-//KW {
-//KW RUNNER_ASSERT_MSG(InstallerException::WrongWidgetPackage == error,
-//KW "Install status returned: " << MsgFromError(error));
-//KW }
-
-void WarpIriTestBase::CheckIsValid()
-{
-/**
- * display information about status installing the widget
- */
- RUNNER_ASSERT_MSG(Jobs::WidgetInstall::Exceptions::Success == error,
- "Install status returned: " << MsgFromError(error));
-}
-
-bool WarpIriTestBase::CheckIriIsValid(const std::string iri)
-{
-/**
- * checking IRI
- */
- return model->AccessList.Get().isRequiredIRI(DPL::FromUTF8String(iri));
-}
-
-bool WarpIriTestBase::CheckIriAccessStatus(const std::string& strIRI)
-{
- if (!WarpIRI::isIRISchemaIgnored(strIRI.c_str()) &&
- !model->AccessList.Get().isRequiredIRI(DPL::FromUTF8String(strIRI)))
- return false;
-
- return true;
-}
-
-void WarpIriTestBase::CheckAccessInfoList(const WidgetAccessInfoList& accessList)
-{
- WidgetAccessInfoList dbAccessList;
- WidgetDAO localdao(widgetHandle);
- localdao.getWidgetAccessInfo(dbAccessList);
-
- for(WidgetAccessInfoList::const_iterator cit = dbAccessList.begin(); cit != dbAccessList.end(); ++cit)
- {
- LogInfo("iri: " << cit->strIRI);
- LogInfo("subdomains: " << static_cast<int> (cit->bSubDomains));
- }
-
- if (dbAccessList.size() != accessList.size())
- {
- RUNNER_ASSERT_MSG(false, "Lists have different sizes");
- }
-
- if (std::equal(dbAccessList.begin(), dbAccessList.end(), accessList.begin()))
- {
- RUNNER_ASSERT_MSG(true, "Access lists are the same");
- }
- else
- {
- RUNNER_ASSERT_MSG(false, "Access lists are different");
- }
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-#ifndef W3C_TEST_BASE_H
-#define W3C_TEST_BASE_H
-
-#include <memory>
-#include <string>
-
-#include <dpl/test/test_runner.h>
-#include <dpl/noncopyable.h>
-
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <installer_controller.h>
-#include <widget_install/widget_install_errors.h>
-#include <widget_model.h>
-
-
-std::string MsgFromError(Jobs::WidgetInstall::Exceptions::Type errorType);
-
-class WarpIriTestBase : DPL::Noncopyable
-{
-private:
- std::string widgetPath;
- std::shared_ptr<WidgetModel> model;
-
- /**
- * Callback function type invoked when widget is installed
- */
- static void install_status_callback(
- void* _This,
- WidgetHandle widgetHandle,
- Jobs::WidgetInstall::Exceptions::Type error);
-
- static void uninstall_status_callback(
- void* _This,
- WidgetHandle widgetHandle,
- Jobs::WidgetUninstall::Exceptions::Type error);
-
-protected:
- WidgetHandle widgetHandle;
- Jobs::WidgetInstall::Exceptions::Type error;
-
-public:
-/**
- * WarpIriTestBase constructor
- */
- WarpIriTestBase (const std::string path) :
- widgetPath (
- std::string(
- WrtDB::GlobalConfig::GetUserInstalledWidgetPath()) +
- "/widget/user/tests/" + path),
- widgetHandle(0),
- error(Jobs::WidgetInstall::Exceptions::ErrorUnknown)
- {
- }
-/**
- * Run test
- */
- void StartTest();
-/**
- * display information about installing the widget
- */
- void CheckIsValid();
-
-//KW void CheckIsNotValid();
-
- bool CheckIriIsValid(const std::string iri);
-/**
- * WarpIriTestBase destructor
- */
- virtual ~WarpIriTestBase();
- bool CheckIriAccessStatus(const std::string& strIRI);
- void CheckAccessInfoList(const WrtDB::WidgetAccessInfoList& accessList);
-};
-
-#endif
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file main.cpp
- * @version 1.0
- * @brief This file is used by WarpIRI tests.
- */
-#include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
-
-#include <string>
-
-#include <wrt_api.h>
-#include <wrt_installer_api.h>
-
-#include <loop_control.h>
-using namespace LoopControl;
-/**
- * Callback function type invoked when WRT is initialized
- */
-void init_cb (WrtErrStatus status, void* data)
-{
- (void) status;
- (void) data;
- LogInfo("Init Succesfull");
- finish_wait_for_wrt_init();
-}
-
-int main (int argc, char *argv[])
-{
-/**
- * initialization main loop
- */
- init_loop(argc, argv);
- LogInfo("Initializing WRT");
-/**
- * wrt initialization
- */
- wrt_installer_init_for_tests(NULL, &init_cb);
- wrt_init(NULL, &init_cb);
-
- wait_for_wrt_init();
- LogInfo("Starting tests");
-
-/**
- * run tests
- */
- int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(argc, argv);
-/**
- * stop wrt
- */
- wrt_installer_shutdown_for_tests();
- wrt_shutdown();
-/**
- * quit loop
- */
- quit_loop();
- return status;
-}
+++ /dev/null
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-# @file CMakeLists.txt
-# @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
-# @version 1.0
-# @brief
-#
-SET(TARGET_WIDGET_TEST "wrt-tests-widget")
-# Set test sources
-FILE(GLOB WIDGET_TESTS_SOURCES "${PROJECT_SOURCE_DIR}/tests/widget_module_tests/*.cpp")
-
-WRT_TEST_BUILD(${TARGET_WIDGET_TEST} ${WIDGET_TESTS_SOURCES})
-WRT_TEST_INSTALL(${TARGET_WIDGET_TEST})
-
-INSTALL(FILES
- ${PROJECT_SOURCE_DIR}/tests/widget_module_tests/empty.wgt
- DESTINATION
- /opt/apps/widget/tests/widget_module
- )
\ No newline at end of file
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file TestCases.cpp
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 1.0
- */
-
-#include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
-
-#include <string>
-#include <memory>
-
-#include <wrt_api.h>
-#include <wrt_installer_api.h>
-#include <dpl/wrt-dao-ro/global_config.h>
-#include <wrt_plugin_export.h>
-#include <installer_controller.h>
-#include <widget_controller.h>
-#include <dpl/wrt-dao-rw/widget_dao.h>
-#include <widget_deserialize_model.h>
-
-#include <loop_control.h>
-using namespace LoopControl;
-
-namespace {
-
-const std::string widgetPath =
- std::string(WrtDB::GlobalConfig::GetTestsDataPath()) +
- "/widget_module/empty.wgt";
-WidgetHandle handle = INVALID_WIDGET_HANDLE;
-void* window = NULL;
-bool failed = false;
-
-} // namespace
-
-////////////////////////////////////////////////////////
-
-void InstallStatusCallback(void* /*_This*/,
- WidgetHandle widgetHandle,
- Jobs::WidgetInstall::Exceptions::Type result)
-{
- failed = false;
- if (Jobs::WidgetInstall::Exceptions::Success != result) {
- LogError("Error during widget installation: " << result);
- failed = true;
- }
- handle = widgetHandle;
- wrt_end_loop();
-}
-
-RUNNER_TEST(test01_preconditions)
-{
- LogInfo("Installing widget " << widgetPath);
- WidgetInstallationStruct widgetStruct(&InstallStatusCallback,
- NULL,
- NULL,
- WidgetUpdateMode::PolicyNeverUpdate);
-
- InstallerControllerEvents::InstallWidgetEvent event(widgetPath,
- widgetStruct);
- CONTROLLER_POST_EVENT(InstallerController, event);
- wrt_start_loop();
- RUNNER_ASSERT(!failed);
- RUNNER_ASSERT(handle != INVALID_WIDGET_HANDLE);
-}
-
-////////////////////////////////////////////////////////
-
-RUNNER_TEST(test02_stopped_widget)
-{
- WidgetModel *model = NULL;
- WidgetControllerEvents::getWidgetModelEvent ev(&model);
- CONTROLLER_POST_SYNC_EVENT(WidgetController, ev);
- RUNNER_ASSERT(NULL == model);
-
- WrtDB::WidgetDAO dao(handle);
-
- std::shared_ptr<WidgetModel> modelPtr = Domain::deserializeWidgetModel(handle);
- RUNNER_ASSERT(!!modelPtr);
- RUNNER_ASSERT(modelPtr->Handle.Get() == handle);
- RUNNER_ASSERT(modelPtr->State.Get() == WidgetState_Stopped);
-}
-
-////////////////////////////////////////////////////////
-
-void WidgetLaunchCallback(ResultContext /*context*/,
- WidgetHandle /*widgetHandle*/,
- CommonError::Type result,
- const std::string& errorMsg,
- UserParam /*userParam*/)
-{
- failed = false;
- if (CommonError::WrtSuccess != result) {
- LogError(errorMsg);
- failed = true;
- }
- wrt_end_loop();
-}
-
-RUNNER_TEST(test03_launch_widget)
-{
- LogInfo("Launching widget " << handle);
- WidgetLaunchStruct ls;
- if (NULL == window) {
- window = abstract_window();
- }
- ls.launchContext = window;
- ls.launchFinishedCallback = &WidgetLaunchCallback;
- ls.widgetArg = "";
-
- // Post launch event to widget controller
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::LaunchWidgetIdEvent(handle, ls));
- wrt_start_loop();
-
- RUNNER_ASSERT(!failed);
-
- WidgetModel *model = NULL;
- WidgetControllerEvents::getWidgetModelEvent ev(&model);
- CONTROLLER_POST_SYNC_EVENT(WidgetController, ev);
- RUNNER_ASSERT(NULL != model);
- RUNNER_ASSERT(model->Handle.Get() == handle);
- RUNNER_ASSERT(model->State.Get() == WidgetState_Running);
-}
-
-////////////////////////////////////////////////////////
-
-void WidgetKilledCallback(WidgetHandle /*widgetHandle*/,
- CommonError::Type result,
- UserParam /*userParam*/)
-{
- failed = false;
- if (CommonError::WrtSuccess != result) {
- LogError("Error when killing widget: " << result);
- failed = true;
- }
- wrt_end_loop();
-}
-
-RUNNER_TEST(test04_pause_widget)
-{
- RUNNER_TODO_MSG("Not implemented");
-}
-
-RUNNER_TEST(test05_resume_widget)
-{
- RUNNER_TODO_MSG("Not implemented");
-}
-
-RUNNER_TEST(test06_reset_widget)
-{
- RUNNER_TODO_MSG("Not implemented");
-}
-
-RUNNER_TEST(test07_kill_widget)
-{
- LogInfo("Killing widget " << handle);
- OperationStatusStruct ks;
- ks.operationStatusCallback = &WidgetKilledCallback;
-
- // Post launch event to widget controller
- CONTROLLER_POST_EVENT(
- WidgetController,
- WidgetControllerEvents::KillWidgetIdEvent(handle, ks));
- wrt_start_loop();
-
- RUNNER_ASSERT(!failed);
-
- WidgetModel *model = NULL;
- WidgetControllerEvents::getWidgetModelEvent ev(&model);
- CONTROLLER_POST_SYNC_EVENT(WidgetController, ev);
- RUNNER_ASSERT(NULL != model);
- RUNNER_ASSERT(model->State.Get() == WidgetState_Stopped);
-}
-
-RUNNER_TEST(test08_deinitialize)
-{
- RUNNER_TODO_MSG("Not implemented");
-}
-
-////////////////////////////////////////////////////////
-
-void UninstallStatusCallback(void* /*_This*/,
- WidgetHandle widgetHandle,
- Jobs::WidgetUninstall::Exceptions::Type error)
-{
- LogInfo("Uninstalled widget handle " << widgetHandle << " error " << error);
- if (Jobs::WidgetUninstall::Exceptions::Success == error)
- handle = INVALID_WIDGET_HANDLE;
- wrt_end_loop();
-}
-
-RUNNER_TEST(test99_postconditions)
-{
- if (INVALID_WIDGET_HANDLE == handle)
- return;
-
- LogDebug("Uninstalling widget " << handle);
- WidgetUninstallationStruct widgetStruct(&UninstallStatusCallback,
- NULL,
- NULL);
- InstallerControllerEvents::UninstallWidgetEvent event(handle,
- widgetStruct);
-
- CONTROLLER_POST_EVENT(InstallerController, event);
- wrt_start_loop();
- RUNNER_ASSERT(handle == INVALID_WIDGET_HANDLE);
-}
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/*
- * @file widget_tests.cpp
- * @author Krzysztof Jackiewicz (k.jackiewicz@samsung.com)
- * @version 1.0
- */
-#include <dpl/test/test_runner.h>
-#include <dpl/log/log.h>
-
-#include <string>
-
-#include <wrt_api.h>
-#include <wrt_installer_api.h>
-
-#include <loop_control.h>
-using namespace LoopControl;
-
-void init_cb (WrtErrStatus status, void* data)
-{
- (void) status;
- (void) data;
- LogInfo("Init Succesfull");
- finish_wait_for_wrt_init();
-}
-
-int main (int argc, char *argv[])
-{
- init_loop(argc, argv);
- LogInfo("Initializing WRT");
- wrt_installer_init_for_tests(NULL, &init_cb);
- wrt_init(NULL, &init_cb);
-
- wait_for_wrt_init();
- LogInfo("Starting tests");
-
- int status = DPL::Test::TestRunnerSingleton::Instance().ExecTestRunner(
- argc,
- argv);
-
- wrt_installer_shutdown_for_tests();
- wrt_shutdown();
- quit_loop();
- return status;
-}
-
+++ /dev/null
-/*
- * Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-/**
- * @file wrt_global_settings.cpp
- * @version 1.0
- * @author Pawel Sikorski(p.sikorski@samsung.com)
- * @author Lukasz Wrzosek (l.wrzosek@samsung.com)
- * @brief for tests
- */
-
-#include <wrt_global_settings_internal.h>
-#include <dpl/log/log.h>
-
-namespace {
-
-bool GetPopupsEnabledFlag() {
- return false;
-}
-
-static bool initializeGlobalSettings();
-
-static bool initHelper = initializeGlobalSettings();
-
-bool initializeGlobalSettings() {
- (void)initHelper;
- LogDebug("Initializing globall settings");
- GlobalSettings::IGlobalSettingsFunctions functions;
- functions.getPopupsEnabledFlag = &GetPopupsEnabledFlag;
- GlobalSettings::SetPredefinedGlobalSettings(functions);
- return false;
-}
-
-}
+++ /dev/null
-#!/usr/bin/python
-#
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-
-class errorDictionary:
- def __init__(self):
- self.empty=True
- self.errors={}
- def append(self,lineNo,msg):
- if isinstance(msg,(list,tuple)):
- for m in msg:
- self.append(lineNo,m)
- else:
- if msg:
- self.do_append(lineNo,msg)
- def do_append(self,lineNo,msg):
- try:
- self.errors[lineNo].append(msg)
- except KeyError:
- self.errors[lineNo]=[msg]
- self.empty=False
- def __setitem__(self,lineNo,msg):
- try:
- del self.errors[lineNo]
- except KeyError:
- pass
- self.append(lineNo,msg)
-
- class errorItem:
- def __init__(self,eD,lineNo):
- self.lineNo=lineNo
- self.errorDict=eD
- def append(self,msg):
- self.errorDict.append(self.lineNo,msg)
- def __str__(self):
- return self.errorDict.errors[self.lineNo].__str__()
- def real_value(self):
- return self.errorDict.errors[self.lineNo]
- def __iadd__(self,other):
- self.errorDict.append(self.lineNo,other)
- def __iter__(self):
- try:
- return self.errorDict.errors[self.lineNo].__iter__()
- except KeyError:
- return None
- def remove(self,msg):
- try:
- self.errorDict.errors[self.lineNo].remove(msg)
- except:
- pass
- def __getitem__(self,elem):
- try:
- return self.errorDict.errors[self.lineNo][elem]
- except KeyError:
- return None
-
- def __getitem__(self,lineNo):
- return errorDictionary.errorItem(self,lineNo)
-
- def __iter__(self):
- return self.errors.__iter__()
- def iterkeys(self):
- return self.errors.iterkeys()
- def keys(self):
- return self.errors.keys()
- def __iadd__(self,other):
- if other.empty: return self
- for i in other.iterkeys():
- self.append(i,other[i].real_value())
- self.empty=False
- return self
- def __add__(self,other):
- rv=errorDictionary()
- if not self.empty:
- rv+=self
- if not other.empty:
- rv+=other
- return rv
-
+++ /dev/null
-#!/bin/bash
-# Copyright (c) 2011 Samsung Electronics Co., Ltd All Rights Reserved
-#
-# Licensed under the Apache License, Version 2.0 (the "License");
-# you may not use this file except in compliance with the License.
-# You may obtain a copy of the License at
-#
-# http://www.apache.org/licenses/LICENSE-2.0
-#
-# Unless required by applicable law or agreed to in writing, software
-# distributed under the License is distributed on an "AS IS" BASIS,
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-# See the License for the specific language governing permissions and
-# limitations under the License.
-#
-
-EXPECTED_ARGS=1
-
-if [ $# -ne $EXPECTED_ARGS ]
-then
- echo "Usage: `basename $0` {arg}, where arg could be WACPolicy UnrestrictedPolicy"
- exit 1
-fi
-
-if [ $1 = "WACPolicy" ]
-then
- killall -9 wrt_engine_daemon
- wrt_reset_db.sh
- cp /usr/etc/ace/WACPolicy.xml /usr/etc/ace/demo.xml
-elif [ $1 = "UnrestrictedPolicy" ]
-then
- killall -9 wrt_engine_daemon
- wrt_reset_db.sh
- cp /usr/etc/ace/UnrestrictedPolicy.xml /usr/etc/ace/demo.xml
-else
- echo "Invalid argument!"
- exit 1
-fi
-
-echo "Policy changed. Please restart wrt_engine_daemon"