diff --git a/lib/roles/app.js b/lib/roles/app.js index 55a11b26..8579b61a 100644 --- a/lib/roles/app.js +++ b/lib/roles/app.js @@ -566,6 +566,16 @@ module.exports = function(options) { ) ]) }) + .on('browser.clear', function(channel, responseChannel, data) { + joinChannel(responseChannel) + push.send([ + channel + , wireutil.transaction( + responseChannel + , new wire.BrowserClearMessage(data) + ) + ]) + }) }) .finally(function() { // Clean up all listeners and subscriptions @@ -592,8 +602,6 @@ module.exports = function(options) { socket.on('forward', function(data) {}) socket.on('refresh', function(data) {}) socket.on('internal.relaunch', function(data) {}) - socket.on('browser.clear', function(data) {}) - socket.on('chrome.clear', function(data) {}) socket.on('internal.clear', function(data) {}) socket.on('selenium.setCookie', function(data) {}) socket.on('selenium.deleteCookie', function(data) {}) diff --git a/lib/roles/device/plugins/browser.js b/lib/roles/device/plugins/browser.js index c172e0ab..9976911b 100644 --- a/lib/roles/device/plugins/browser.js +++ b/lib/roles/device/plugins/browser.js @@ -12,14 +12,16 @@ module.exports = syrup.serial() .define(function(options, router, push, adb, input) { var log = logger.createLogger('device:plugins:browsers') + function pkg(component) { + return component.split('/', 1)[0] + } + log.info('Fetching browser list') return input.getBrowsers() .timeout(15000) .then(function(browsers) { browsers.apps.forEach(function(app) { - var pkg = app.component.split('/', 1)[0] - - switch (pkg) { + switch (pkg(app.component)) { case 'com.android.chrome': app.type = 'chrome' break @@ -66,6 +68,24 @@ module.exports = syrup.serial() }) }) + router.on(wire.BrowserClearMessage, function(channel, message) { + var reply = wireutil.reply(options.serial) + adb.clear(options.serial, pkg(message.browser)) + .then(function() { + push.send([ + channel + , reply.okay() + ]) + }) + .catch(function(err) { + log.error('Browser could not be cleared', err.stack) + push.send([ + channel + , reply.fail() + ]) + }) + }) + return browsers }) }) diff --git a/lib/wire/wire.proto b/lib/wire/wire.proto index b5dde554..99c29568 100644 --- a/lib/wire/wire.proto +++ b/lib/wire/wire.proto @@ -42,6 +42,7 @@ enum MessageType { LogcatStartMessage = 39; LogcatStopMessage = 40; BrowserOpenMessage = 41; + BrowserClearMessage = 42; } message Envelope { @@ -382,3 +383,7 @@ message BrowserOpenMessage { required string url = 1; optional string browser = 2; } + +message BrowserClearMessage { + optional string browser = 1; +} diff --git a/res/app/components/stf/control/control-service.js b/res/app/components/stf/control/control-service.js index 85ddf4df..a44cc3f4 100644 --- a/res/app/components/stf/control/control-service.js +++ b/res/app/components/stf/control/control-service.js @@ -204,6 +204,12 @@ module.exports = function ControlServiceFactory( , browser: browser ? browser.id : null }) } + + this.clearBrowser = function(browser) { + return sendTwoWay('browser.clear', { + browser: browser.id + }) + } } controlService.create = function(target, channel) {