1
0
Fork 0
mirror of https://github.com/openstf/stf synced 2025-10-05 02:29:26 +02:00

Fix browser plugin not updating in real time.

This commit is contained in:
Simo Kinnunen 2014-05-01 20:13:29 +09:00
parent 26b2b1acc6
commit 98ecf57d49
9 changed files with 128 additions and 181 deletions

View file

@ -193,7 +193,6 @@ dbapi.saveDeviceIdentity = function(serial, identity) {
, abi: identity.abi
, sdk: identity.sdk
, display: identity.display
, browser: identity.browser
, phone: identity.phone
}))
}

View file

@ -344,7 +344,7 @@ module.exports = function(options) {
, battery: message
})
})
.on(wire.BrowserPackageEvent, function(channel, message) {
.on(wire.DeviceBrowserMessage, function(channel, message) {
var serial = message.serial
delete message.serial
socket.emit('device.change', {

View file

@ -21,6 +21,7 @@ module.exports = function(options) {
.dependency(require('./device/plugins/display'))
.dependency(require('./device/plugins/http'))
.dependency(require('./device/plugins/service'))
.dependency(require('./device/plugins/browser'))
.dependency(require('./device/plugins/clipboard'))
.dependency(require('./device/plugins/logcat'))
.dependency(require('./device/plugins/shell'))

View file

@ -4,122 +4,113 @@ var logger = require('../../../util/logger')
var wire = require('../../../wire')
var wireutil = require('../../../wire/util')
var mapping = {
'com.android.chrome': 'chrome'
, 'com.chrome.beta': 'chrome-beta'
, 'com.sec.android.app.sbrowser': 'samsung-chrome'
, 'com.android.browser': 'android'
, 'org.mozilla.firefox': 'firefox'
, 'org.mozilla.firefox_beta': 'firefox-beta'
, 'com.opera.browser': 'opera'
, 'com.opera.mini.android': 'opera-mini'
, 'com.opera.browser.beta': 'opera-beta'
, 'com.UCMobile.intl': 'uc'
, 'com.explore.web.browser': 'lightning'
, 'com.baidu.browser.inter': 'baidu'
, 'com.tencent.ibibo.mtt': 'one'
}
module.exports = syrup.serial()
.dependency(require('../support/router'))
.dependency(require('../support/push'))
.dependency(require('../support/adb'))
.dependency(require('./service'))
.define(function(options, router, push, adb, service) {
var log = logger.createLogger('device:plugins:browsers')
var log = logger.createLogger('device:plugins:browser')
function pkg(component) {
return component.split('/', 1)[0]
}
log.info('Fetching browser list')
return service.getBrowsers()
.timeout(15000)
.then(function(browsers) {
browsers.apps.forEach(function(app) {
switch (pkg(app.component)) {
case 'com.android.chrome':
app.type = 'chrome'
break
case 'com.chrome.beta':
app.type = 'chrome-beta'
break
case 'com.sec.android.app.sbrowser':
app.type = 'samsung-chrome'
break
case 'com.android.browser':
app.type = 'android'
break
case 'org.mozilla.firefox':
app.type = 'firefox'
break
case 'org.mozilla.firefox_beta':
app.type = 'firefox-beta'
break
case 'com.opera.browser':
app.type = 'opera'
break
case 'com.opera.mini.android':
app.type = 'opera-mini'
break
case 'com.opera.browser.beta':
app.type = 'opera-beta'
break
case 'com.UCMobile.intl':
app.type = 'uc'
break
case 'com.explore.web.browser':
app.type = 'lightning'
break
case 'com.baidu.browser.inter':
app.type = 'baidu'
break
case 'com.tencent.ibibo.mtt':
app.type = 'one'
break
default:
app.type = app.name.toLowerCase()
.replace(/\s+/g, '-')
}
function processApp(app) {
return {
id: app.component
, type: mapping[pkg(app.component)] ||
app.name.toLowerCase().replace(/\s+/g, '-')
, name: app.name
, selected: app.selected
}
}
app.id = app.component
function updateBrowsers(data) {
log.info('Updating browser list')
push.send([
wireutil.global
, wireutil.envelope(new wire.DeviceBrowserMessage(
options.serial
, data.selected
, data.apps.map(function(app) {
return new wire.DeviceBrowserAppMessage(processApp(app))
})
))
])
}
delete app.icon
delete app.component
function loadBrowsers() {
log.info('Loading browser list')
return service.getBrowsers()
.then(updateBrowsers)
}
service.on('browserPackageChange', updateBrowsers)
router.on(wire.BrowserOpenMessage, function(channel, message) {
if (message.browser) {
log.info('Opening "%s" in "%s"', message.url, message.browser)
}
else {
log.info('Opening "%s"', message.url)
}
var reply = wireutil.reply(options.serial)
adb.startActivity(options.serial, {
action: 'android.intent.action.VIEW'
, component: message.browser
, data: message.url
})
router.on(wire.BrowserOpenMessage, function(channel, message) {
if (message.browser) {
log.info('Opening "%s" in "%s"', message.url, message.browser)
}
else {
log.info('Opening "%s"', message.url)
}
var reply = wireutil.reply(options.serial)
adb.startActivity(options.serial, {
action: 'android.intent.action.VIEW'
, component: message.browser
, data: message.url
})
.then(function() {
push.send([
channel
, reply.okay()
])
})
.catch(function(err) {
log.error('Browser could not be opened', err.stack)
push.send([
channel
, reply.fail()
])
})
.then(function() {
push.send([
channel
, reply.okay()
])
})
router.on(wire.BrowserClearMessage, function(channel, message) {
log.info('Clearing "%s"', message.browser)
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()
])
})
.catch(function(err) {
log.error('Browser could not be opened', err.stack)
push.send([
channel
, reply.fail()
])
})
})
return browsers
})
router.on(wire.BrowserClearMessage, function(channel, message) {
log.info('Clearing "%s"', message.browser)
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 loadBrowsers()
})

View file

@ -6,16 +6,14 @@ var logger = require('../../../util/logger')
module.exports = syrup.serial()
.dependency(require('../support/properties'))
.dependency(require('./display'))
.dependency(require('./browser'))
.dependency(require('./phone'))
.define(function(options, properties, display, browser, phone) {
.define(function(options, properties, display, phone) {
var log = logger.createLogger('device:plugins:identity')
function solve() {
log.info('Solving identity')
var identity = devutil.makeIdentity(options.serial, properties)
identity.display = display
identity.browser = browser
identity.phone = phone
return identity
}

View file

@ -1,4 +1,5 @@
var util = require('util')
var events = require('events')
var syrup = require('syrup')
var Promise = require('bluebird')
@ -37,6 +38,7 @@ module.exports = syrup.serial()
.define(function(options, adb, router, push, apk) {
var log = logger.createLogger('device:plugins:service')
var messageResolver = new MessageResolver()
var plugin = new events.EventEmitter()
var agent = {
socket: null
@ -182,6 +184,7 @@ module.exports = syrup.serial()
, message.enabled
))
])
plugin.emit('airplaneModeChange', message)
break
case apk.wire.MessageType.EVENT_BATTERY:
var message = apk.wire.BatteryEvent.decode(envelope.message)
@ -198,23 +201,11 @@ module.exports = syrup.serial()
, message.voltage
))
])
plugin.emit('batteryChange', message)
break
case apk.wire.MessageType.EVENT_BROWSER_PACKAGE:
var message = apk.wire.BrowserPackageEvent.decode(envelope.message)
push.send([
wireutil.global
, wireutil.envelope(new wire.BrowserPackageEvent(
options.serial
, message.selected
, message.apps.map(function(app) {
return new wire.BrowserApp(
app.name
, app.component
, app.selected
)
})
))
])
plugin.emit('browserPackageChange', message)
break
case apk.wire.MessageType.EVENT_CONNECTIVITY:
var message = apk.wire.ConnectivityEvent.decode(envelope.message)
@ -229,6 +220,7 @@ module.exports = syrup.serial()
, message.roaming
))
])
plugin.emit('connectivityChange', message)
break
case apk.wire.MessageType.EVENT_PHONE_STATE:
var message = apk.wire.PhoneStateEvent.decode(envelope.message)
@ -241,6 +233,7 @@ module.exports = syrup.serial()
, message.operator
))
])
plugin.emit('phoneStateChange', message)
break
case apk.wire.MessageType.EVENT_ROTATION:
var message = apk.wire.RotationEvent.decode(envelope.message)
@ -251,6 +244,7 @@ module.exports = syrup.serial()
, message.rotation
))
])
plugin.emit('rotationChange', message)
break
}
}
@ -267,14 +261,14 @@ module.exports = syrup.serial()
)
}
function type(text) {
plugin.type = function(text) {
return runAgentCommand(
apk.wire.MessageType.DO_TYPE
, new apk.wire.DoTypeRequest(text)
)
}
function paste(text) {
plugin.paste = function(text) {
return setClipboard(text)
.then(function() {
keyEvent({
@ -285,28 +279,28 @@ module.exports = syrup.serial()
})
}
function wake() {
plugin.wake = function() {
return runAgentCommand(
apk.wire.MessageType.DO_WAKE
, new apk.wire.DoWakeRequest()
)
}
function freezeRotation(rotation) {
plugin.freezeRotation = function(rotation) {
return runAgentCommand(
apk.wire.MessageType.SET_ROTATION
, new apk.wire.SetRotationRequest(rotation, true)
)
}
function thawRotation() {
plugin.thawRotation = function() {
return runAgentCommand(
apk.wire.MessageType.SET_ROTATION
, new apk.wire.SetRotationRequest(0, false)
)
}
function version() {
plugin.version = function() {
return runServiceCommand(
apk.wire.MessageType.GET_VERSION
, new apk.wire.GetVersionRequest()
@ -321,7 +315,7 @@ module.exports = syrup.serial()
})
}
function unlock() {
plugin.unlock = function() {
return runServiceCommand(
apk.wire.MessageType.SET_KEYGUARD_STATE
, new apk.wire.SetKeyguardStateRequest(false)
@ -335,7 +329,7 @@ module.exports = syrup.serial()
})
}
function lock() {
plugin.lock = function() {
return runServiceCommand(
apk.wire.MessageType.SET_KEYGUARD_STATE
, new apk.wire.SetKeyguardStateRequest(true)
@ -349,7 +343,7 @@ module.exports = syrup.serial()
})
}
function acquireWakeLock() {
plugin.acquireWakeLock = function() {
return runServiceCommand(
apk.wire.MessageType.SET_WAKE_LOCK
, new apk.wire.SetWakeLockRequest(true)
@ -363,7 +357,7 @@ module.exports = syrup.serial()
})
}
function releaseWakeLock() {
plugin.releaseWakeLock = function() {
return runServiceCommand(
apk.wire.MessageType.SET_WAKE_LOCK
, new apk.wire.SetWakeLockRequest(false)
@ -377,7 +371,7 @@ module.exports = syrup.serial()
})
}
function identity() {
plugin.identity = function() {
return runServiceCommand(
apk.wire.MessageType.DO_IDENTIFY
, new apk.wire.DoIdentifyRequest(options.serial)
@ -391,7 +385,7 @@ module.exports = syrup.serial()
})
}
function setClipboard(text) {
plugin.setClipboard = function(text) {
return runServiceCommand(
apk.wire.MessageType.SET_CLIPBOARD
, new apk.wire.SetClipboardRequest(
@ -408,7 +402,7 @@ module.exports = syrup.serial()
})
}
function getClipboard() {
plugin.getClipboard = function() {
return runServiceCommand(
apk.wire.MessageType.GET_CLIPBOARD
, new apk.wire.GetClipboardRequest(
@ -428,7 +422,7 @@ module.exports = syrup.serial()
})
}
function getBrowsers() {
plugin.getBrowsers = function() {
return runServiceCommand(
apk.wire.MessageType.GET_BROWSERS
, new apk.wire.GetBrowsersRequest()
@ -444,7 +438,7 @@ module.exports = syrup.serial()
})
}
function getProperties(properties) {
plugin.getProperties = function(properties) {
return runServiceCommand(
apk.wire.MessageType.GET_PROPERTIES
, new apk.wire.GetPropertiesRequest(properties)
@ -488,7 +482,7 @@ module.exports = syrup.serial()
router
.on(wire.PhysicalIdentifyMessage, function(channel) {
var reply = wireutil.reply(options.serial)
identity()
plugin.identity()
push.send([
channel
, reply.okay()
@ -513,29 +507,16 @@ module.exports = syrup.serial()
})
})
.on(wire.TypeMessage, function(channel, message) {
type(message.text)
plugin.type(message.text)
})
.on(wire.RotateMessage, function(channel, message) {
if (message.rotation >= 0) {
freezeRotation(message.rotation)
plugin.freezeRotation(message.rotation)
}
else {
thawRotation()
plugin.thawRotation()
}
})
return {
acquireWakeLock: acquireWakeLock
, copy: getClipboard
, getBrowsers: getBrowsers
, getProperties: getProperties
, identity: identity
, lock: lock
, paste: paste
, releaseWakeLock: releaseWakeLock
, unlock: unlock
, version: version
, wake: wake
}
})
.return(plugin)
})

View file

@ -42,17 +42,6 @@ module.exports = syrup.serial()
, identity.display.secure
, identity.display.url
)
, new wire.DeviceBrowserMessage(
identity.browser.selected
, identity.browser.apps.map(function(app) {
return new wire.DeviceBrowserAppMessage(
app.id
, app.type
, app.name
, app.selected
)
})
)
, new wire.DevicePhoneMessage(identity.phone)
))
])

View file

@ -102,7 +102,7 @@ module.exports = function(options) {
dbapi.setDeviceBattery(message.serial, message)
appDealer.send([channel, data])
})
.on(wire.BrowserPackageEvent, function(channel, message, data) {
.on(wire.DeviceBrowserMessage, function(channel, message, data) {
dbapi.setDeviceBrowser(message.serial, message)
appDealer.send([channel, data])
})

View file

@ -45,7 +45,7 @@ enum MessageType {
BrowserClearMessage = 42;
AirplaneModeEvent = 43;
BatteryEvent = 44;
BrowserPackageEvent = 45;
DeviceBrowserMessage = 45;
ConnectivityEvent = 46;
PhoneStateEvent = 47;
RotationEvent = 48;
@ -151,8 +151,9 @@ message DeviceBrowserAppMessage {
}
message DeviceBrowserMessage {
required bool selected = 1;
repeated DeviceBrowserAppMessage apps = 2;
required string serial = 1;
required bool selected = 2;
repeated DeviceBrowserAppMessage apps = 3;
}
message DevicePhoneMessage {
@ -172,7 +173,6 @@ message DeviceIdentityMessage {
required string abi = 7;
required string sdk = 8;
required DeviceDisplayMessage display = 9;
required DeviceBrowserMessage browser = 10;
required DevicePhoneMessage phone = 11;
}
@ -413,18 +413,6 @@ message BatteryEvent {
required double voltage = 8;
}
message BrowserApp {
required string name = 1;
required string component = 2;
required bool selected = 3;
}
message BrowserPackageEvent {
required string serial = 1;
required bool selected = 2;
repeated BrowserApp apps = 3;
}
message ConnectivityEvent {
required string serial = 1;
required bool connected = 2;