Commit bb7ef8a9 authored by jennyz's avatar jennyz Committed by Commit bot

Check import module update before launching the primary kiosk app.

Add a test case for verifying launching app with updating a shared module to the new version.

Re-packaged several testing apps downloaded from webstore to remove the update url from their manifest files.

BUG=555083

Review URL: https://codereview.chromium.org/1488393002

Cr-Commit-Position: refs/heads/master@{#363038}
parent 77a20f60
...@@ -93,6 +93,8 @@ void FakeCWS::InitAsPrivateStore(net::EmbeddedTestServer* embedded_test_server, ...@@ -93,6 +93,8 @@ void FakeCWS::InitAsPrivateStore(net::EmbeddedTestServer* embedded_test_server,
update_check_end_point_ = update_check_end_point; update_check_end_point_ = update_check_end_point;
SetupWebStoreURL(embedded_test_server->base_url()); SetupWebStoreURL(embedded_test_server->base_url());
OverrideGalleryCommandlineSwitches();
embedded_test_server->RegisterRequestHandler( embedded_test_server->RegisterRequestHandler(
base::Bind(&FakeCWS::HandleRequest, base::Unretained(this))); base::Bind(&FakeCWS::HandleRequest, base::Unretained(this)));
} }
......
...@@ -72,12 +72,7 @@ StartupAppLauncher::StartupAppLauncher(Profile* profile, ...@@ -72,12 +72,7 @@ StartupAppLauncher::StartupAppLauncher(Profile* profile,
: profile_(profile), : profile_(profile),
app_id_(app_id), app_id_(app_id),
diagnostic_mode_(diagnostic_mode), diagnostic_mode_(diagnostic_mode),
delegate_(delegate), delegate_(delegate) {
network_ready_handled_(false),
launch_attempt_(0),
ready_to_launch_(false),
wait_for_crx_update_(false),
secondary_apps_updated_(false) {
DCHECK(profile_); DCHECK(profile_);
DCHECK(crx_file::id_util::IdIsValid(app_id_)); DCHECK(crx_file::id_util::IdIsValid(app_id_));
KioskAppManager::Get()->AddObserver(this); KioskAppManager::Get()->AddObserver(this);
...@@ -269,6 +264,59 @@ void StartupAppLauncher::MaybeLaunchApp() { ...@@ -269,6 +264,59 @@ void StartupAppLauncher::MaybeLaunchApp() {
} }
} }
void StartupAppLauncher::MaybeCheckExtensionUpdate() {
extensions::ExtensionUpdater* updater =
extensions::ExtensionSystem::Get(profile_)
->extension_service()
->updater();
if (!delegate_->IsNetworkReady() || !updater) {
MaybeLaunchApp();
return;
}
extension_update_found_ = false;
registrar_.Add(this, extensions::NOTIFICATION_EXTENSION_UPDATE_FOUND,
content::NotificationService::AllSources());
// Enforce an immediate version update check for all extensions before
// launching the primary app. After the chromeos is updated, the shared
// module(e.g. ARC runtime) may need to be updated to a newer version
// compatible with the new chromeos. See crbug.com/555083.
extensions::ExtensionUpdater::CheckParams params;
params.install_immediately = true;
params.callback = base::Bind(
&StartupAppLauncher::OnExtensionUpdateCheckFinished, AsWeakPtr());
updater->CheckNow(params);
}
void StartupAppLauncher::OnExtensionUpdateCheckFinished() {
if (extension_update_found_) {
// Reload the primary app to make sure any reference to the previous version
// of the shared module, extension, etc will be cleaned up andthe new
// version will be loaded.
extensions::ExtensionSystem::Get(profile_)
->extension_service()
->ReloadExtension(app_id_);
extension_update_found_ = false;
}
registrar_.Remove(this, extensions::NOTIFICATION_EXTENSION_UPDATE_FOUND,
content::NotificationService::AllSources());
MaybeLaunchApp();
}
void StartupAppLauncher::Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) {
DCHECK(type == extensions::NOTIFICATION_EXTENSION_UPDATE_FOUND);
typedef const std::pair<std::string, Version> UpdateDetails;
const std::string& id = content::Details<UpdateDetails>(details)->first;
const Version& version = content::Details<UpdateDetails>(details)->second;
VLOG(1) << "Found extension update id=" << id
<< " version=" << version.GetString();
extension_update_found_ = true;
}
void StartupAppLauncher::OnFinishCrxInstall(const std::string& extension_id, void StartupAppLauncher::OnFinishCrxInstall(const std::string& extension_id,
bool success) { bool success) {
// Wait for pending updates or dependent extensions to download. // Wait for pending updates or dependent extensions to download.
...@@ -293,10 +341,10 @@ void StartupAppLauncher::OnFinishCrxInstall(const std::string& extension_id, ...@@ -293,10 +341,10 @@ void StartupAppLauncher::OnFinishCrxInstall(const std::string& extension_id,
} }
if (GetPrimaryAppExtension()) { if (GetPrimaryAppExtension()) {
if (!secondary_apps_updated_) if (!secondary_apps_installed_)
MaybeInstallSecondaryApps(); MaybeInstallSecondaryApps();
else else
MaybeLaunchApp(); MaybeCheckExtensionUpdate();
} }
} }
...@@ -465,7 +513,7 @@ void StartupAppLauncher::MaybeInstallSecondaryApps() { ...@@ -465,7 +513,7 @@ void StartupAppLauncher::MaybeInstallSecondaryApps() {
return; return;
} }
secondary_apps_updated_ = true; secondary_apps_installed_ = true;
extensions::KioskModeInfo* info = extensions::KioskModeInfo* info =
extensions::KioskModeInfo::Get(GetPrimaryAppExtension()); extensions::KioskModeInfo::Get(GetPrimaryAppExtension());
KioskAppManager::Get()->InstallSecondaryApps(info->secondary_app_ids); KioskAppManager::Get()->InstallSecondaryApps(info->secondary_app_ids);
...@@ -479,8 +527,8 @@ void StartupAppLauncher::MaybeInstallSecondaryApps() { ...@@ -479,8 +527,8 @@ void StartupAppLauncher::MaybeInstallSecondaryApps() {
} }
if (AreSecondaryAppsInstalled()) { if (AreSecondaryAppsInstalled()) {
// Launch the primary app. // Check extension update before launching the primary kiosk app.
MaybeLaunchApp(); MaybeCheckExtensionUpdate();
} else { } else {
OnLaunchFailure(KioskAppLaunchError::UNABLE_TO_INSTALL); OnLaunchFailure(KioskAppLaunchError::UNABLE_TO_INSTALL);
} }
......
...@@ -13,6 +13,8 @@ ...@@ -13,6 +13,8 @@
#include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_launch_error.h"
#include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h" #include "chrome/browser/chromeos/app_mode/kiosk_app_manager_observer.h"
#include "chrome/browser/extensions/install_observer.h" #include "chrome/browser/extensions/install_observer.h"
#include "content/public/browser/notification_observer.h"
#include "content/public/browser/notification_registrar.h"
#include "google_apis/gaia/oauth2_token_service.h" #include "google_apis/gaia/oauth2_token_service.h"
class Profile; class Profile;
...@@ -32,7 +34,8 @@ namespace chromeos { ...@@ -32,7 +34,8 @@ namespace chromeos {
class StartupAppLauncher : public base::SupportsWeakPtr<StartupAppLauncher>, class StartupAppLauncher : public base::SupportsWeakPtr<StartupAppLauncher>,
public OAuth2TokenService::Observer, public OAuth2TokenService::Observer,
public extensions::InstallObserver, public extensions::InstallObserver,
public KioskAppManagerObserver { public KioskAppManagerObserver,
public content::NotificationObserver {
public: public:
class Delegate { class Delegate {
public: public:
...@@ -94,6 +97,9 @@ class StartupAppLauncher : public base::SupportsWeakPtr<StartupAppLauncher>, ...@@ -94,6 +97,9 @@ class StartupAppLauncher : public base::SupportsWeakPtr<StartupAppLauncher>,
void MaybeInstallSecondaryApps(); void MaybeInstallSecondaryApps();
void MaybeLaunchApp(); void MaybeLaunchApp();
void MaybeCheckExtensionUpdate();
void OnExtensionUpdateCheckFinished();
void StartLoadingOAuthFile(); void StartLoadingOAuthFile();
static void LoadOAuthFileOnBlockingPool(KioskOAuthParams* auth_params); static void LoadOAuthFileOnBlockingPool(KioskOAuthParams* auth_params);
void OnOAuthFileLoaded(KioskOAuthParams* auth_params); void OnOAuthFileLoaded(KioskOAuthParams* auth_params);
...@@ -128,17 +134,24 @@ class StartupAppLauncher : public base::SupportsWeakPtr<StartupAppLauncher>, ...@@ -128,17 +134,24 @@ class StartupAppLauncher : public base::SupportsWeakPtr<StartupAppLauncher>,
void OnKioskExtensionLoadedInCache(const std::string& app_id) override; void OnKioskExtensionLoadedInCache(const std::string& app_id) override;
void OnKioskExtensionDownloadFailed(const std::string& app_id) override; void OnKioskExtensionDownloadFailed(const std::string& app_id) override;
// content::NotificationObserver implementation.
void Observe(int type,
const content::NotificationSource& source,
const content::NotificationDetails& details) override;
Profile* profile_; Profile* profile_;
const std::string app_id_; const std::string app_id_;
const bool diagnostic_mode_; const bool diagnostic_mode_;
Delegate* delegate_; Delegate* delegate_;
bool network_ready_handled_; bool network_ready_handled_ = false;
int launch_attempt_; int launch_attempt_ = 0;
bool ready_to_launch_; bool ready_to_launch_ = false;
bool wait_for_crx_update_; bool wait_for_crx_update_ = false;
bool secondary_apps_updated_; bool secondary_apps_installed_ = false;
bool extension_update_found_ = false;
KioskOAuthParams auth_params_; KioskOAuthParams auth_params_;
content::NotificationRegistrar registrar_;
DISALLOW_COPY_AND_ASSIGN(StartupAppLauncher); DISALLOW_COPY_AND_ASSIGN(StartupAppLauncher);
}; };
......
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDmJvQFpDnngGBy
iIEpjw4RfxRNS/keOHz54Qjh5M5PKAlZPHZmxhEsrg8FwAQWiZP6/zrtPFAVzalU
WJJjBz5TLUmGY8BLvg3nBEHtcQ6qTcJHRms96wi4gM76DIZVdjh5SW0c5XY41CPP
alfr8Xtdhg+Y2d+Em5jjS33JMXQgilR34cpKzj4KfPvzX4nQULc0DhdnRshrWzZq
Np3vjZYdt0D7WfJR52RUsQHZxIuY5oKxv/IRG43/NENx1QdtmkMdVZxcv59F+zg8
qC7HxsLlSo4A0mdYR/9Qldqkxdl3j1FqEDF+XLZHntmpydCbt9GyddmIwSeiSob5
5Yka4EwLAgMBAAECggEBAIMIKmYL2euzazXKAb9nctsDPsvDNVG/V2fsduIlIlBu
uuPTSJW6royBjIv5hlpOebGtHh9y9yVysbUTuEQpG5K/ddzNbe2xhri/88j7VR4g
pzttHCFkbtKcgzpZZyHA7OYgp76L5YL1RG4SXXw3P8U/TiH36QnWjHTbxgGF5lef
VZCM/f6p73JySbvgmkoUW2fi757bEz3Tb2CWiNbdutfFBnjm9Vh0Mp/aF3RJM7tZ
vQTU3yAcXKqhtqLXQ6uT+D7zZfgTImZnRLwOnIQRz0xEIIbjU4/CNZdMT3HbGsbC
kK+9Exru8j61epCwFUfiaixq71CqHggyIplBoTonMgECgYEA9PHUCj/VAFHPYqZZ
pUHX/6+A0Rl7QcmuQ5xP0QzQcE8OXLZEUtWmRUDs4Vx0qQRKFDU4s2mj1b/PETl4
dl36tPNoZb74GbvGisb5ZU26d1II/+3axJ5AcMylHRyyQt2SxSFggSaLS4VWYClu
7uDDrG87dC7JNa66oj0P88Sf5C8CgYEA8Io1K4tbuVrqqTsrEJ0UyDrLBw9eSIvk
2BnTomt517fTt368Kq/IutKw3aV8ZkgdJIGswua67OSC08faw/piRgUuYxtpXvFU
b74Au0wQHUM0g3W9fe4iTjsJEIkaFpa2ITxL/eaDmr9gO4t6rRepl8Sewulh444E
ZxMXDF04MuUCgYBSySEHTcep0fyrtNl7lyNv0VtSULBt7cIuK7h2SURxkOajwx6Y
eIk3wtfM2zi6ny6CYfKGAOBUr/1GLwxdxSmk2tef+8lSuTpDUTidWoX5KgrMpRFZ
frr85M2xZy+Ale6zHbLGM8bEgY5N9fL+XY0EzJtliyKKOEHv739ivkPkFQKBgAJy
taXSzkUtqrO8OWz63EpJZuWUf3YnjlWwtZmylFPguBPnA00/6sAUAt7On1x/IWTM
uRBmvsJIdRhosU5LTxK9XMJ/dewUcrKMcX92f7d8hp1L5njQoqK/MRFtA8n1ELd3
4KId5Xr+taEFg2MdmYlE5ATB0VA6ksrlw9dJX5gNAoGAGAo7B78o1f3BGuBqgYiM
irmpDiUbx9bSm1En1hs9/D7jeAMay+omroTaBnEaycFjOY3baeMNuDp8myGYzeKd
Z6CaDi9o0MJnbOX32DNNLyhrg67tlH/mwO1D6+vKnzIywuS4bWuW0CbDRCSsG9Mh
irtGu/xwo/nI8U2ZI8bDXyE=
-----END PRIVATE KEY-----
...@@ -15,8 +15,8 @@ ...@@ -15,8 +15,8 @@
"kiosk_enabled": true, "kiosk_enabled": true,
"offline_enabled": true, "offline_enabled": true,
"kiosk_secondary_apps": [ "kiosk_secondary_apps": [
{"id": "ihplaomghjbeafnpnjkhppmfpnmdihgd"}, {"id": "emnbflhfbllbehnpjmjddklbkeeoaaeg"},
{"id": "fiehokkcgaojmbhfhlpiheggjhaedjoc"} {"id": "blmjgfbajihimkjmepbhgmjbopjchlda"}
], ],
"permissions": [ "permissions": [
"power" "power"
......
...@@ -15,7 +15,7 @@ ...@@ -15,7 +15,7 @@
"kiosk_enabled": true, "kiosk_enabled": true,
"offline_enabled": true, "offline_enabled": true,
"kiosk_secondary_apps": [ "kiosk_secondary_apps": [
{"id": "fiehokkcgaojmbhfhlpiheggjhaedjoc"} {"id": "blmjgfbajihimkjmepbhgmjbopjchlda"}
], ],
"permissions": [ "permissions": [
"power" "power"
......
...@@ -15,6 +15,6 @@ ...@@ -15,6 +15,6 @@
"kiosk_enabled": true, "kiosk_enabled": true,
"offline_enabled": true, "offline_enabled": true,
"kiosk_secondary_apps": [ "kiosk_secondary_apps": [
{"id": "imlgadjgphbjkaceoiapiephhgeofhic"} {"id": "gdmgkkoghcihimdfoabkefdkccllcfea"}
] ]
} }
...@@ -15,9 +15,9 @@ ...@@ -15,9 +15,9 @@
"kiosk_enabled": true, "kiosk_enabled": true,
"offline_enabled": true, "offline_enabled": true,
"kiosk_secondary_apps": [ "kiosk_secondary_apps": [
{"id": "ihplaomghjbeafnpnjkhppmfpnmdihgd"}, {"id": "emnbflhfbllbehnpjmjddklbkeeoaaeg"},
{"id": "fiehokkcgaojmbhfhlpiheggjhaedjoc"}, {"id": "blmjgfbajihimkjmepbhgmjbopjchlda"},
{"id": "aabnpdpieclcikafhdkkpldcaodmfoai"} {"id": "jkofhenkpndpdflehcjpcekgecjkpggg"}
], ],
"permissions": [ "permissions": [
"power" "power"
......
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQDzgLk3sBpIZygk
esyB/KqtrdK05IK4IK5JA3AWhRWMnJd5Go4u6F+TJldnP6eBA8gLrlqXgwLbFPI9
0kPDjw+Lb/eydhN2icsVbAwBOrmce1S7B76Lh/PoAj3rqbGVudlIJTBuc/U9Zmkn
renpOqgv6pAUGw5Fpo++6GH0wUGJmB41tdoI5OrkiR51nwbeqe8ZG2kOKMWJVGN0
z0uxQ4iq8XJPghrh2FgdpUyB4asq5j/A2Z0QHAcCs73iAGES00KLLsUhuv/RvUjp
M5YyK72RQk2G9JI1HnBoqwyI0oXiVr67AYzWw9Cw4PpObMBYWXMl7TF591DGFopp
LmnweQRTAgMBAAECggEBAMmdQD5aojhmqTcjMedCxDMPpFHAjndUH9o2bX1H7eLB
2S0djrJKFrBo45+Kde99qQn67+lZQWkSO8xyJ0dpUW6bY5Sw7UaNqsfu8TWnYP2u
pCZDsEIpbAsiqBBTLcWR3tU8bZBWlKyk+dYvymgg+BbMeUUcbcG/um9QS6LyzIfV
/V4LIq9Gf6WJJw0HB2muNCtzn1Bt55ZjGPK+QgGNYuteTNtcTLDPuEBTp8oQfBPw
X6eDbTFL6EIEHqSWGLCg5QhtOvgz/3QTIeMzJYJ6n5zZZ+1nIZmGtk1wY4+aDpIe
iQfjabak4fQ/hAnPSNMZvw8yjheWj4ENdCVzoCKOd2ECgYEA+7VW/wVGMIpiCW94
TOXtoek74w74xz69OHcbLp3XzOvDtNfX5j7DORGOw/bukYp7qSH33/oui5mpQppD
O5MVTk8/KFZtXvHY/5ffJzwGJdz3SCnZCoJyE0jME33pYlN6t10mEPBrh/35DcHv
3vCqaLJN6F/lkQ8iIf/t1+7YxeMCgYEA96eRa/rJmnSH1zc8CNXK+quUHtokfv2W
sc+x6VxSlKzpE6OU8Ay3TH94hoZfQRCsZMX1ab9nRfLwe8u9Bvi9jfwJkCJkr40b
O/91JKAfXV3sxAwTMGW4ayBIa2ftjJfvm1ZYNs7QhwshcQ9OHqdnZWfaa93JkkZm
BSUnAu4MktECgYEAt+Ogngk1YSsIOop0YgGs3RfvB5Adkjq0tLbXZfQs/2nS/aCe
+3go2d2I5oPVgQCiHUtSsxAsxxJIxP68VZ679w0QQCD8IFwhw4Epp5lDiI/pHJBu
Hy5ztsD9TtQzGAGS6rkjoUZz2NNkC3f/DWnXpUt2fWjp51MeBabbFWFKfy8CgYB0
CnxFUDluufN8kFD9AtAdLJA29JftOP2HS35djfjT2UFNBnUfFZY9rezXe9beMeXV
Qjx/1EObrv2nxAtKXPrUsKf6dWMgLsn4DvbgtnZ71Sq/objMEJ2c9H96dDQGkJqg
+pBS/g0PedOtmjJMgrwb89GQgVeVxo6/Em15HfmeQQKBgQCBq/966gD0SZ9cHTw8
7tRVrDEIAygjJYjCy3psHbBiorynbQAiBrnHfb2Ty3M4y7tygVHzGalrTwUYhe23
0pQsMfwcJCZC03tq6ujQgUUKfNtD+NxCU7QixrTIVqUUlcuzBcv31cuZx1hekoje
RJy//J+Smym4/T1gQNSpsqegiw==
-----END PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQC7lD52iGwy/N8P
AHbrUnI4fhOjmkXEPXAFW5xdnlIG+RS2TKUjqo5ufQwxBHeyWL/BmYtj4rekdke/
jZ419EhTFwYUw6aLpLKQPTjeNylf4Zmr2xUchPaZSgSKemPZIrJY36QgBoXf+G+r
99gMYMJAecyzPoWsCvb+W64D48XrOQHaRf3T7CQpiyVemdfB/TrP4Qmd2U3tLzB3
HbSfEQ7AkDpupdv2sovyuR1SAxY8JkgLUoDtU46xUGwFS9hs8YhcY8gHs8V9Gqvx
YPFxNCVP3v4Sz4FWRZvFzhrzTuE5c1JVDg2oXPSKLviXvw8aboRlkq1RlduTqQ7N
llJPnSppAgMBAAECggEAfZe8WtDs4Ra+ouTEurrxDzIbJCdfHw2ju3KjN2uRsGmF
nKmkyESiKQhA6XD8U8VoXs/XrIFYRB2N3IuNqsJsynVX9P8qu8UCaeET+nUklrYO
liqR8A52rhwI/k8EG5ZHo4nZ8jdr25IT8yh215LRfSoQDNOH3LFavuPTl3ciRWM4
ZFLkGO8QrfoDAdoC6xYNFDWGHLz5tvOtZ+p2iEZ7z1WYwebqmi7wgVnjQEUkDwg2
j9XlpAxM4x2rK5Wv5L6M3QRm7ct2qpA3v7D7Xt7wwyH8bs1fa25BB32DzdpcqDBh
k1wqzUOGsK9xDinuLCbNCkhEdzc1bZla/1jXF7EiIQKBgQDivV/JqNHk1kFw2jQz
PCMjNfRp9mPGXSUdBIrK9G19HyffjgQLQmiP17yZ7JHL+X+fd0tMhpuwlrnEPYNp
J24u6rwfHq/MHIz96I6/mRFMr9KFSc+LmG9IkdE/wxMG4Rl7fdAnliAOjt3cq/gv
RfS2F9Tm6PgEHOPfa0xKuyGvVwKBgQDTySYwjWB6/YjNC2Ray/7SmxNxG7PwpZIa
AegZfXoldK/baskKbpj8bjCer+4RV4kU/60YJyN9TtjY62Ol3U1LAFN8XyFaGDea
Dx4dB3LkX+eCcRrCrUguNGqQif8GEAaEoNWkfNkiuZzNVovysmwfsdLI+opyBBo4
J4F8ZhacPwKBgB5uhFiwi9tG1mmrH65wt9aV+0Ptid6pyb1nSqmKvNc6Q0PB79ED
DL2hmvKdycOyrOpePID84BCHak9oYibO3/70CmOy3q1qd5HskJwukx/TyVGSYoS9
5NG8oHUKXZdixuTIMhPeFldd3XEss5bEsN9vu2dyhTcoGX13DTpKe27pAoGABdvZ
r5wpoB1lbG61PwHHseHSXt2qU6zw5sFIv3PGLkUVHFfO6ff3SXxu4eTyDA7E3wzX
qARlKfFFdHLGle8SVVHT/WvQS2LCHwPuDFWJayHwEJ66Y8pRZd3TWN5IbM2CsKaW
Ym+Fvj0uRkvvoS4oaZQMxbyQmejdJNKK9XsJgxcCgYEAtJmoe7hiCTqKetX7N56P
uxOmf1KpRnqDgWyq+l8dTJ4rSPOGr8N1X7JGGoHaO/8ElWkPKJ2WNAB1HbRMFTNz
+3NhQLLEZUp64nLUtMSaN2XvQhSminbzPtLF+i0jijjfw4HYTb64kDAbFlz8zrJ3
Oahu+bwAN5SyrQgIJI4BxDw=
-----END PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEvwIBADANBgkqhkiG9w0BAQEFAASCBKkwggSlAgEAAoIBAQC4BIDw3iHLPtZ4
LBEEeojs5z4DsBdpN1wwNsPSV8PP5otZORAeYeB6KY5CrXOtogoiNwZGm1CbX/2E
2s4+qpN1ZmvuR49jKvYemNPPX5WO0mQHVRzJOU73V6FtSFvSnyj4oAnOSasuSGtb
CebJjQxYv0mWeMMfK9AFr6zyN4KEntnHjKWcqAcuxNRkcjNeFL3mVGFku5eo9i8M
XMffH8mwK4Jb4uH42ux9PJH/HMYC/n6Sn+gfEOGPh3/jKxUgPfCBkuoj58QqJ3Yt
jyDUGi6ilVMa0754xTkpQUwIVsHzR/86BzA+3/j8z76vxYGyq0PfKXD4EfoajNBT
poWFl1TBAgMBAAECggEBALJP4uYESXjZ5hbClKbjWeU92jDWpIjXFSS/HJepZdwC
SUtm6QCX1V5rACgKTYqV9v3aleE7RSuaI15ma+37ejIL0lAt1XrBuYZCjxRmSdUA
d99HEULHnoY8yvbLY/a/NYNeCMJ1TkPl9ulbud/aJnmkuljtoh2FZejsp0h6k6WP
ZWEMmIdpSIMNktIjeBTmuQWoGibX04WpKqbdt9QhGz0sRoojjA8foLje39oEW7a1
8E0VJibfXUm7GgzdzLmVJTiViBzf2+4ZUdfZOzksl/9/QjT4okdI4g984+aTddet
gp37Nkf+m33ASCyFgKiU28Z0WSqS6nA/lT+M8X0pYwECgYEA7vOo1O3IfnS+xOz5
6Z+PHADtOJRTozBqty/RqAfBp0nVVbnxpj8VHNxr/4kBrOaKvXMr0mMfKUTvrQEr
tZX0PNVYvdzMvEdf3b5QEvnZBjC/2zQAxiSj2mqTMFcW488NluWGHFuGm2N1MdcO
FzgiTrbSKC1+KEmBFaoIfPpOllECgYEAxSV/R352qMTmQkr+ImgP49pL6+lIVkLj
FKE/UsWVGRcz14pxuOg9yaC2KCv0nAcFEPTMOL2mv1RVuKwVzeiFcNAOrook6oG9
eTAup606HFzkDvLxRXpH4Oj8zqu5riI3Faw+ViCo5AiK54t58qKpzWBsFjVZ1cdQ
gMpZhwF5i3ECgYEAobpvCfcKnXRc7iJKn/IrxVNnO8VAupH5mJUX/PeK/bP+XXBl
+xR1MLyLqD/Nz32WZ9V80n/eRmtvIRRKxjOBRG9OCetY8xIH86hsv/s1BXiXUkDn
STThZeJ+TtiTGIs6cmhVFfpop+FwH9Sjp9mJdudMZH8uBQyC/uu/pP8xk5ECgYBt
/Bdf+WuViBO1lETnSQrkYRrOCB11EmfBUJwVP2mIz+r6KqB7OgWOgPxeuPcEPN5U
sV1lolhukUwpdMfNUhVv9ILcWPFzauIbxAejP/8VZ7VLqbl0u11yWkj/u8ohHbGB
g9BbGGlgnmtv9d4YwSreCxcB5M2zeDivQTRlHyuB4QKBgQCmKoHvFapbJ6MgG1r8
bFFdl6UXehN6q6KXS+T4jCUbbLJbyI6uj39QOB9BsbHB6qI30g0GfF6rq3Vrsx9n
B3RxvyoZhnvXn1gCubvcl+wNPMKSYumDBOzvk+zQxXp3UMT9q8E6sfG9YmwajPu3
Tid+7nx+zm42NvmzVDi3jgyutQ==
-----END PRIVATE KEY-----
-----BEGIN PRIVATE KEY-----
MIIEuwIBADANBgkqhkiG9w0BAQEFAASCBKUwggShAgEAAoIBAQC5Yqr1sdfY5Kr8
OPq1tj1M31P9ICSFOhR5FUMP6WQ3uPr4TV1wpenG/WtUl68S/HQ6gj8qu7Shcq+E
AG8tJZ6ZgrV4I3NuFpq2xiI9OjCIDfHT+LpOohcagETtDTGVhJWwyEHUqC9rsQ0P
BWxyogwBGIFIJRz8IwZ08e8ntrrgV7OuUmeK7pgjw0SI7may7FWdTOoLNhvAtZDh
Q6TJOi2ZHRZ+ekAccQ1fUMCoeQoPmjtLb3faR+WV0hLb5JppEdtSl05j1X4LSGnr
9+67J3ZBZN87DjMkPu+BOdpR2EKOgFwnGNkXVvqbQz7oIy7tv/Ctj9JU1ilfPwMn
iioQhMOVAgMBAAECgf9EEfa0QJkBCvW9py5nioL3twkf6K2APdNGoof9T7V8wG9m
vQGSW1l7t5GxfgDK9+e1lB2dk06/+Vx5G6+25BlYRKZddqbrxWEJu7bWxIcNbhFd
w/ak6N+S24ZzhGSwgf506xNBAoBnCpvA6Dzp2paN0HGoC/iYnEPCrRMjgfUcaneS
7LWVy38+niCGy7WKdv5GBS/nALVx5CXRqeawXs8Awa49mfV63P3s3dIE5COK55xw
32SQVMuXCV9ZC2C+tbdFxKKAzgQVGS3oENa/ov3TP9FXlr0nlj9FAGigvhMl0qKB
gjXXxCL5/xpkw+9ZdD9lmlV8LlKvyKCEM5Oc3IECgYEA2zbBWiJUksyKqAalaO7Z
jgShtjRlGEv+gm2TxV2fGFoxDYK8s0Se/obyhCoDzRluRXS0u2wTZuYXRbFkL4PT
JsUvlOaNmfRJ9lfuiFdX3E3sg0Uzulr+7XN7tdUz1szA+Ft+ESQ2N0HlHxGMDk97
wb7Wfp9F5M4PmvFJAn5/lPECgYEA2H6rg9mchTustKBz7II85kQ013RBu22iYPF6
KrcfLL1iANIfDJ8dB0A+P4dp6hQCsM/3Go+jLTLpM5u/zYL2pEKOGssQAlrEjBNe
hNpYerxYpprfsq0g9NPfsxzpUNJd8IRnzymo/T3FZZWWO4okmY0Wp+Uuv3sbfS6N
KBONCOUCgYEAgZMCAxcbypHgu6UCDN5x9gJC3AJoZ040KEBBAn5uVeSp7gSDKau8
F1MI8porGQaZKbDsS4R8i2wiAW3zfCp9mwMfNvJ4bLH7LgOX2TtXkb71uDolc1fq
K80BKN/W/naU8biS8ernqQ3oMs8abDMLQeBdxQa8N5ydmMZak4DWROECgYAL2/R9
RoBidABj7J4tCH1Zh8b1PnMTV1Aby16L1HgqtT0XGmuE/3pRmV1PkZVlsy7qjJnW
pKOlqDJKF3AMS+5C1Tp/kTwRRPObULxOvr82Cfc5OSaj3QP/JVQNtbm6KavnrvkY
ygltxeJ4TBdsr4aNusLQ86b56j55PwGQfnGtWQKBgBvrYWZn9EY09HZGrmI5pK3P
08roc7qjU6sRKQUdST1qWaPo/Ct8N1t0cx9IjOx29vRm6LjaF8SNMAW9wQUliJkK
QCwO5RJGSh4H/ujUPVJaf7gWp/3hrsFvdFqLiweMbP21Us3j/drR0EdZK2Rt29hJ
zLxK87gXUSzJKDND1XQ3
-----END PRIVATE KEY-----
...@@ -10,6 +10,5 @@ ...@@ -10,6 +10,5 @@
"background": { "background": {
"scripts": ["main.js"] "scripts": ["main.js"]
}, },
"kiosk_enabled": true,
"offline_enabled": true "offline_enabled": true
} }
{
"export": {},
"name": "Shared Module",
"manifest_version": 2,
"version": "2.0.0"
}
// Copyright (c) 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
var pass_shared_module = {};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment