Commit e8e57d09 authored by Juliet Levesque's avatar Juliet Levesque Committed by Commit Bot

[Nearby] Add tab to trigger events/log messages in Nearby Share Service.

Provide buttons to trigger Register/Unregister Send/Receive Surfaces,
and SendText, Accept, Open, Reject, Cancel events with a selection from
list of ShareTargets in the Nearby Sharing Service. Displays results
from events in a list on the tab, seen in the following screenshot:
https://screenshot.googleplex.com/UiyAoJ8Lwzw

Bug: 1093634
Change-Id: I085c836b21aeeaa77595d71c1e732f2dee6519ba
Reviewed-on: https://chromium-review.googlesource.com/c/chromium/src/+/2315800
Commit-Queue: Juliet Levesque <julietlevesque@google.com>
Reviewed-by: default avatarLei Zhang <thestig@chromium.org>
Reviewed-by: default avatarKyle Horimoto <khorimoto@chromium.org>
Reviewed-by: default avatarJosh Nohle <nohle@chromium.org>
Cr-Commit-Position: refs/heads/master@{#799929}
parent 8c185722
......@@ -18,7 +18,10 @@ js_type_check("closure_compile") {
":nearby_http_browser_proxy",
":nearby_internals",
":nearby_logs_browser_proxy",
":nearby_ui_trigger_browser_proxy",
":types",
":ui_trigger_list_object",
":ui_trigger_tab",
]
}
......@@ -33,7 +36,10 @@ js_library("nearby_internals") {
":nearby_contact_browser_proxy",
":nearby_http_browser_proxy",
":nearby_logs_browser_proxy",
":nearby_ui_trigger_browser_proxy",
":types",
":ui_trigger_list_object",
":ui_trigger_tab",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
"//ui/webui/resources/js:cr.m",
]
......@@ -89,6 +95,30 @@ js_library("http_message_object") {
]
}
js_library("nearby_ui_trigger_browser_proxy") {
deps = [
":types",
"//ui/webui/resources/js:cr.m",
]
}
js_library("ui_trigger_tab") {
deps = [
":nearby_ui_trigger_browser_proxy",
":types",
":ui_trigger_list_object",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
"//ui/webui/resources/js:cr.m",
]
}
js_library("ui_trigger_list_object") {
deps = [
":nearby_ui_trigger_browser_proxy",
"//third_party/polymer/v3_0/components-chromium/polymer:polymer_bundled",
]
}
js_library("types") {
}
......@@ -129,5 +159,7 @@ html_to_js("web_components") {
"logging_tab.js",
"nearby_internals.js",
"shared_style.js",
"ui_trigger_list_object.js",
"ui_trigger_tab.js",
]
}
......@@ -43,13 +43,13 @@
<div id="item">
<div id="header">
<span>
<p>Contacts list sent? [[item.contacts_passed]]</p>
<p>Contacts list changed? [[item.contacts_list_changed]]</p>
<p>Contacts list sent? [[item.contactsPassed]]</p>
<p>Contacts list changed? [[item.contactsListChanged]]</p>
<p>
Contacts added to allowlist? [[item.contacts_added_to_allowlist]]
Contacts added to allowlist? [[item.contactsAddedToAllowlist]]
</p>
<p>
Contacts removed from allowlist? [[item.contacts_removed_from_allowlist]]
Contacts removed from allowlist? [[item.contactsRemovedFromAllowlist]]
</p>
</span>
<div id="flex"></div>
......@@ -60,10 +60,10 @@
</div>
<iron-collapse opened="[[contentExpanded_]]">
<p class="expanded-element-title">Contact Records:
<p class="expanded-element">[[item.contact_records]]</p>
<p class="expanded-element">[[item.contactRecords]]</p>
</p>
<p class="expanded-element-title">Allowed Contact Ids:
<p class="expanded-element">[[item.allowed_ids]]</p>
<p class="expanded-element">[[item.allowedIds]]</p>
</p>
</iron-collapse>
</div>
......@@ -85,6 +85,6 @@ Polymer({
* @private
*/
onContactUpdateAdded_(contact) {
this.contactList_.unshift(contact);
this.unshift('contactList_', contact);
},
});
......@@ -30,16 +30,13 @@ Polymer({
* @private
*/
itemChanged_() {
switch (this.item.direction) {
case Direction.REQUEST:
this.$['item'].classList.add('request');
break;
case Direction.RESPONSE:
this.$['item'].classList.add('response');
break;
default:
break;
let classStyle = '';
if (this.item.direction === Direction.REQUEST) {
classStyle = 'request';
} else if (this.item.direction === Direction.RESPONSE) {
classStyle = 'response';
}
this.$['item'].className = classStyle;
},
/**
......
......@@ -94,6 +94,6 @@ Polymer({
* @private
*/
onHttpMessageAdded_(message) {
this.httpMessageList_.unshift(message);
this.unshift('httpMessageList_', message);
},
});
......@@ -34,4 +34,5 @@
<logging-tab></logging-tab>
<http-tab></http-tab>
<contact-tab></contact-tab>
<ui-trigger-tab></ui-trigger-tab>
</iron-pages>
......@@ -8,6 +8,7 @@ import 'chrome://resources/polymer/v3_0/iron-pages/iron-pages.js';
import './http_tab.js';
import './logging_tab.js';
import './contact_tab.js';
import './ui_trigger_tab.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
Polymer({
......@@ -33,7 +34,7 @@ Polymer({
/** @private */
tabNames_: {
type: Array,
value: () => ['Logs', 'HTTP Messages', 'Contacts'],
value: () => ['Logs', 'HTTP Messages', 'Contacts', 'UI Triggers'],
readonly: true,
},
......
......@@ -34,6 +34,10 @@
file="${root_gen_dir}\chrome\browser\resources\nearby_internals\logging_tab.js"
use_base_dir="false"
type="BINDATA"/>
<include name="IDR_NEARBY_INTERNALS_UI_TRIGGER_TAB_JS"
file="${root_gen_dir}\chrome\browser\resources\nearby_internals\ui_trigger_tab.js"
use_base_dir="false"
type="BINDATA"/>
<include name="IDR_NEARBY_INTERNALS_NEARBY_INTERNALS_JS"
file="${root_gen_dir}\chrome\browser\resources\nearby_internals\nearby_internals.js"
use_base_dir="false"
......@@ -44,6 +48,9 @@
<include name="IDR_NEARBY_INTERNALS_NEARBY_LOGS_BROWSER_PROXY_JS"
file="nearby_logs_browser_proxy.js"
type="BINDATA"/>
<include name="IDR_NEARBY_INTERNALS_NEARBY_UI_TRIGGER_BROWSER_PROXY_JS"
file="nearby_ui_trigger_browser_proxy.js"
type="BINDATA"/>
<include name="IDR_NEARBY_INTERNALS_SHARED_STYLE_JS"
file="${root_gen_dir}\chrome\browser\resources\nearby_internals\shared_style.js"
use_base_dir="false"
......@@ -59,6 +66,10 @@
<include name="IDR_NEARBY_INTERNALS_NEARBY_CONTACT_BROWSER_PROXY_JS"
file="nearby_contact_browser_proxy.js"
type="BINDATA"/>
<include name="IDR_NEARBY_INTERNALS_UI_TRIGGER_LIST_OBJECT_JS"
file="${root_gen_dir}\chrome\browser\resources\nearby_internals\ui_trigger_list_object.js"
use_base_dir="false"
type="BINDATA"/>
</includes>
</release>
</grit>
// Copyright 2020 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.
import {addSingletonGetter, sendWithPromise} from 'chrome://resources/js/cr.m.js';
import {StatusCode} from './types.js';
/**
* JavaScript hooks into the native WebUI handler to pass information to the
* UI Trigger tab.
*/
export class NearbyUiTriggerBrowserProxy {
/**
* Initializes web contents in the WebUI handler.
*/
initialize() {
chrome.send('initializeUiTrigger');
}
/**
* Invokes the NearbyShare service's SendText() method for the input
* ShareTarget |id|
* @param {string} id
*/
sendText(id) {
chrome.send('sendText', [id]);
}
/**
* Invokes the NearbyShare service's Cancel() method for the input
* ShareTarget |id|
* @param {string} id
*/
cancel(id) {
chrome.send('cancel', [id]);
}
/**
* Invokes the NearbyShare service's Accept() method for the input
* ShareTarget |id|
* @param {string} id
*/
accept(id) {
chrome.send('accept', [id]);
}
/**
* Invokes the NearbyShare service's Reject() method for the input
* ShareTarget |id|
* @param {string} id
*/
reject(id) {
chrome.send('reject', [id]);
}
/**
* Invokes the NearbyShare service's Open() method for the input
* ShareTarget |id|
* @param {string} id
*/
open(id) {
chrome.send('open', [id]);
}
/**
* Registers the UI trigger handler instance as a foreground send surface.
* @return {!Promise<!StatusCode>}
*/
registerSendSurfaceForeground() {
return sendWithPromise('registerSendSurfaceForeground');
}
/**
* Registers the UI trigger handler instance as a background send surface.
* @return {!Promise<!StatusCode>}
*/
registerSendSurfaceBackground() {
return sendWithPromise('registerSendSurfaceBackground');
}
/**
* Unregisters the send surface UI trigger handler instance.
* @return {!Promise<!StatusCode>}
*/
unregisterSendSurface() {
return sendWithPromise('unregisterSendSurface');
}
/**
* Registers the UI trigger handler instance as a foreground receive surface.
* @return {!Promise<!StatusCode>}
*/
registerReceiveSurfaceForeground() {
return sendWithPromise('registerReceiveSurfaceForeground');
}
/**
* Registers the UI trigger handler instance as a background receive surface.
* @return {!Promise<!StatusCode>}
*/
registerReceiveSurfaceBackground() {
return sendWithPromise('registerReceiveSurfaceBackground');
}
/**
* Unregisters the receive surface UI trigger handler instance.
* @return {!Promise<!StatusCode>}
*/
unregisterReceiveSurface() {
return sendWithPromise('unregisterReceiveSurface');
}
}
addSingletonGetter(NearbyUiTriggerBrowserProxy);
......@@ -63,11 +63,65 @@ export let HttpMessage;
* The ContactUpdate message object sent by NearbyInternalsContactsHandler
* chrome/browser/ui/webui/nearby_internals/nearby_internals_contact_handler.cc.
* @typedef {{time: number,
* contacts_passed: boolean,
* contacts_list_changed: boolean,
* contacts_added_to_allowlist: boolean,
* contacts_removed_from_allowlist: boolean,
* allowed_ids: string,
* contact_records: string}}
* contactsPassed: boolean,
* contactsListChanged: boolean,
* contactsAddedToAllowlist: boolean,
* contactsRemovedFromAllowlist: boolean,
* allowedIds: string,
* contactRecords: string}}
*/
export let ContactUpdate;
/**
* The StatusCode callback object, sent by NearbyInternalsUiTriggerHandler
* chrome/browser/ui/webui/nearby_internals/nearby_internals_ui_trigger_handler.cc.
* @typedef {{statusCode: string,
* time: number,
* triggerEvent: string}}
*/
export let StatusCode;
/**
* The TransferMetadata callback object, sent by NearbyInternalsUiTriggerHandler
* chrome/browser/ui/webui/nearby_internals/nearby_internals_ui_trigger_handler.cc.
* @typedef {{transferMetadataStatus: string,
* time: number,
* deviceName: string,
* shareTargetId: string}}
*/
export let TransferMetadataStatus;
/**
* Timestamped message object that allows us to display information passed in
* from the WebUIHandler in the list of the UI trigger tab.
* @typedef {{message: string,
* time: number}}
*/
export let TimestampedMessage;
/**
* Share Target object sent by NearbyInternalsUiTriggerHandler on discovery or
* lost.
* @typedef {{deviceName: string,
* shareTargetId: string,
* time: number}}
*/
export let ShareTarget;
/**
* ShareTargetDiscoveryChange enum for display when ShareTarget is lost or
* discovered.
* @enum {number}
*/
export const ShareTargetDiscoveryChange = {
DISCOVERED: 0,
LOST: 1
};
/**
* Select object for displaying passed in ShareTargets in selection list.
* @typedef {{name: string,
* selected: boolean,
* value: string}}
*/
export let ShareTargetSelectOption;
<style>
#generic-object {
left: 0;
padding-left: 5px;
position: absolute;
text-align: left;
width: 100%;
}
#time {
font-size: 10px;
padding: 5px;
position: absolute;
right: 0;
}
#item {
margin: 10px;
padding: 10px;
}
</style>
<div id="item">
<span id="generic-object">[[item.message]]</span>
<span id="time">[[formatTime_(item.time)]]</span>
</div>
// Copyright 2020 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.
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {TimestampedMessage} from './types.js';
Polymer({
is: 'ui-trigger-object',
_template: html`{__html_template__}`,
properties: {
/**
* Underlying StatusCode data for this item. Contains read-only fields
* from the NearbyShare back-end.
* Type: {!TimestampedMessage}
*/
timestampedMessage: {
type: Object,
},
},
/**
* Sets the string representation of time.
* @private
* @param {number} time
* @return {string}
*/
formatTime_(time) {
const d = new Date(time);
return d.toLocaleTimeString();
},
});
<style include="shared-style">
:host {
--standard-border: 1px solid black;
}
ui-trigger-object:last-child {
border-bottom: var(--standard-border);
}
ui-trigger-object {
border-left: var(--standard-border);
border-right: var(--standard-border);
border-top: var(--standard-border);
}
.buttons {
display: flex;
}
#logging-section {
width: 100%;
}
#share-select {
padding-right: 10px;
}
#flex {
flex: 1;
}
cr-button {
height: 35px;
padding: 5px;
width: 150px;
}
</style>
<div>
<div class="buttons">
<cr-button class="internals-button"
on-click="onRegisterSendSurfaceBackgroundClicked_">
Register Background SendSurface
</cr-button>
<cr-button class="internals-button"
on-click="onRegisterSendSurfaceForegroundClicked_">
Register Foreground SendSurface
</cr-button>
<cr-button class="internals-button"
on-click="onUnregisterSendSurfaceClicked_">
Unregister Current SendSurface
</cr-button>
<span id="flex"></span>
<cr-button on-click="onAcceptClicked_" class="internals-button"
class="trigger-button" disabled="[[!shareTargetSelectOptionList_.length]]">
Accept
</cr-button>
<cr-button on-click="onRejectClicked_" class="internals-button"
class="trigger-button" disabled="[[!shareTargetSelectOptionList_.length]]">
Reject
</cr-button>
<cr-button on-click="onOpenClicked_" class="internals-button"
class="trigger-button" disabled="[[!shareTargetSelectOptionList_.length]]">
Open
</cr-button>
</div>
<div class="buttons">
<cr-button class="internals-button"
on-click="onRegisterReceiveSurfaceBackgroundClicked_">
Register Background ReceiveSurface
</cr-button>
<cr-button class="internals-button"
on-click="onRegisterReceiveSurfaceForegroundClicked_">
Register Foreground ReceiveSurface
</cr-button>
<cr-button class="internals-button"
on-click="onUnregisterReceiveSurfaceClicked_">
Unregister Current ReceiveSurface
</cr-button>
<span id="flex"></span>
<select id="share-select" on-change="onSelectChange_">
<template is="dom-repeat" items="[[shareTargetSelectOptionList_]]">
<option value="[[item.value]]" selected="[[item.selected]]">
[[item.name]]
</option>
</template>
</select>
<cr-button on-click="onSendTextClicked_" class="internals-button"
class="trigger-button" disabled="[[!shareTargetSelectOptionList_.length]]">
Send Text
</cr-button>
<cr-button on-click="onCancelClicked_" class="internals-button"
class="trigger-button" disabled="[[!shareTargetSelectOptionList_.length]]">
Cancel
</cr-button>
</div>
</div>
<iron-list items="[[uiTriggerObjectList_]]" as="generic-object" id="logging-section">
<template>
<ui-trigger-object item="[[generic-object]]">
</ui-trigger-object>
</template>
</iron-listt>
// Copyright 2020 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.
import 'chrome://resources/cr_elements/cr_button/cr_button.m.js';
import 'chrome://resources/cr_elements/shared_vars_css.m.js';
import './ui_trigger_list_object.js';
import './shared_style.js';
import {WebUIListenerBehavior} from 'chrome://resources/js/web_ui_listener_behavior.m.js';
import {html, Polymer} from 'chrome://resources/polymer/v3_0/polymer/polymer_bundled.min.js';
import {NearbyUiTriggerBrowserProxy} from './nearby_ui_trigger_browser_proxy.js';
import {ShareTarget, ShareTargetDiscoveryChange, ShareTargetSelectOption, StatusCode, TimestampedMessage, TransferMetadataStatus} from './types.js';
Polymer({
is: 'ui-trigger-tab',
_template: html`{__html_template__}`,
behaviors: [
WebUIListenerBehavior,
],
properties: {
/** @private {!Array<!TimestampedMessage>} */
uiTriggerObjectList_: {
type: Array,
value: [],
},
/** @private {!Array<!ShareTargetSelectOption>} */
shareTargetSelectOptionList_: {
type: Array,
value: [],
},
/** @private {string} ID of the selected ShareTarget or ''*/
selectedShareTargetId_: String,
},
/** @private {?NearbyUiTriggerBrowserProxy}*/
browserProxy_: null,
/**
* Initialize |browserProxy_|,|selectedShareTargetId_|, and
* |shareTargetSelectOptionList_|.
* @override
*/
created() {
this.browserProxy_ = NearbyUiTriggerBrowserProxy.getInstance();
},
/**
* When the page is initialized, notify the C++ layer to allow JavaScript and
* initialize WebUI Listeners.
* @override
*/
attached() {
this.addWebUIListener(
'transfer-updated',
transferUpdate => this.onTransferUpdateAdded_(transferUpdate));
this.addWebUIListener(
'share-target-discovered',
shareTarget => this.onShareTargetDiscovered_(shareTarget));
this.addWebUIListener(
'share-target-lost',
shareTarget => this.onShareTargetLost_(shareTarget));
this.addWebUIListener(
'on-status-code-returned',
statusCode => this.onStatusCodeReturned_(statusCode));
this.addWebUIListener(
'share-target-map-updated',
shareTargetMapUpdate =>
this.onShareTargetMapChanged_(shareTargetMapUpdate));
this.browserProxy_.initialize();
},
/**
* Triggers RegisterSendSurface with Foreground as Send state.
* @private
*/
onRegisterSendSurfaceForegroundClicked_() {
this.browserProxy_.registerSendSurfaceForeground().then(
statusCode => this.onStatusCodeReturned_(statusCode));
},
/**
* Triggers RegisterSendSurface with Background as Send state.
* @private
*/
onRegisterSendSurfaceBackgroundClicked_() {
this.browserProxy_.registerSendSurfaceBackground().then(
statusCode => this.onStatusCodeReturned_(statusCode));
},
/**
* Triggers UnregisterSendSurface.
* @private
*/
onUnregisterSendSurfaceClicked_() {
this.browserProxy_.unregisterSendSurface().then(
statusCode => this.onStatusCodeReturned_(statusCode));
},
/**
* Triggers RegisterReceiveSurface with Foreground as Receive state.
* @private
*/
onRegisterReceiveSurfaceForegroundClicked_() {
this.browserProxy_.registerReceiveSurfaceForeground().then(
statusCode => this.onStatusCodeReturned_(statusCode));
},
/**
* Triggers RegisterReceiveSurface with Background as Receive state.
* @private
*/
onRegisterReceiveSurfaceBackgroundClicked_() {
this.browserProxy_.registerReceiveSurfaceBackground().then(
statusCode => this.onStatusCodeReturned_(statusCode));
},
/**
* Triggers UnregisterReceiveSurface.
* @private
*/
onUnregisterReceiveSurfaceClicked_() {
this.browserProxy_.unregisterReceiveSurface().then(
statusCode => this.onStatusCodeReturned_(statusCode));
},
/**
* Logs status code returned by triggered events.
* @param {!StatusCode} statusCode
* @private
*/
onStatusCodeReturned_(statusCode) {
const message =
statusCode.triggerEvent + ' Result: ' + statusCode.statusCode;
const time = statusCode.time;
this.unshift('uiTriggerObjectList_', {'message': message, 'time': time});
},
/**
* Triggers sendText with selected |shareTargetId|.
* @private
*/
onSendTextClicked_() {
this.browserProxy_.sendText(this.selectedShareTargetId_);
},
/**
* Triggers Accept with selected |shareTargetId|.
* @private
*/
onAcceptClicked_() {
this.browserProxy_.accept(this.selectedShareTargetId_);
},
/**
* Triggers Reject with selected |shareTargetId|.
* @private
*/
onRejectClicked_() {
this.browserProxy_.reject(this.selectedShareTargetId_);
},
/**
* Triggers Cancel with selected |shareTargetId|.
* @private
*/
onCancelClicked_() {
this.browserProxy_.cancel(this.selectedShareTargetId_);
},
/**
* Triggers Open with selected |shareTargetId|.
* @private
*/
onOpenClicked_() {
this.browserProxy_.open(this.selectedShareTargetId_);
},
/**
* Updates |selectedShareTargetId_| with the new selected option.
* @private
*/
onSelectChange_() {
this.selectedShareTargetId_ =
this.shadowRoot.querySelector('#share-select').selectedOptions[0].value;
},
/**
* Parses an array of ShareTargets and adds to the JavaScript list
* |shareTargetSelectOptionList_| to be displayed in select list.
* @param {!Array<!ShareTarget>} shareTargetMapUpdate
* @private
*/
onShareTargetMapChanged_(shareTargetMapUpdate) {
this.shareTargetSelectOptionList_ = [];
shareTargetMapUpdate.forEach((shareTarget) => {
const name = `${shareTarget.deviceName} (${shareTarget.shareTargetId})`;
const value = shareTarget.shareTargetId;
const selected = value === this.selectedShareTargetId_;
this.push(
'shareTargetSelectOptionList_',
{'name': name, 'selected': selected, 'value': value});
});
},
/**
* Handles ShareTargets when they are discovered in the C++.
* @param {!ShareTarget} shareTarget
* @private
*/
onShareTargetDiscovered_(shareTarget) {
this.convertShareTargetToTimestampedMessageAndAppendToList_(
shareTarget, ShareTargetDiscoveryChange.DISCOVERED);
},
/**
* Handles ShareTargets when they are lost in the C++.
* @param {!ShareTarget} shareTarget
* @private
*/
onShareTargetLost_(shareTarget) {
this.convertShareTargetToTimestampedMessageAndAppendToList_(
shareTarget, ShareTargetDiscoveryChange.LOST);
},
/**
* Adds |transferUpdate| sent in from WebUI listener to the displayed list.
* @param {!TransferMetadataStatus} transferUpdate
* @private
*/
onTransferUpdateAdded_(transferUpdate) {
this.convertTransferUpdateTimestampedMessageAndAppendToList_(
transferUpdate);
},
/**
* Converts |transferUpdate| sent in to a generic object to be displayed.
* @param {!TransferMetadataStatus} transferUpdate
* @private
*/
convertTransferUpdateTimestampedMessageAndAppendToList_(transferUpdate) {
const time = transferUpdate.time;
const message =
`${transferUpdate.deviceName} (${transferUpdate.shareTargetId}): ${
transferUpdate.transferMetadataStatus}`;
this.unshift('uiTriggerObjectList_', {'message': message, 'time': time});
},
/**
* Converts |statusCode| sent in to a generic object to be displayed.
* @param {!StatusCode} statusCode
* @private
*/
convertStatusCodeToTimestampedMessageAndAppendToList_(statusCode) {
const time = statusCode.time;
const message = `${statusCode.triggerEvent} ${statusCode.statusCode}`;
this.unshift('uiTriggerObjectList_', {'message': message, 'time': time});
},
/**
* Converts |shareTarget| sent in to when discovered/lost a generic object to
* be displayed.
* @private
* @param {!ShareTarget} shareTarget
* @param {!ShareTargetDiscoveryChange} discoveryChange
*/
convertShareTargetToTimestampedMessageAndAppendToList_(
shareTarget, discoveryChange) {
const time = shareTarget.time;
const message = `${shareTarget.deviceName} (${shareTarget.shareTargetId}) ${
this.shareTargetDirectionToString_(discoveryChange)}`;
this.unshift('uiTriggerObjectList_', {'message': message, 'time': time});
},
/**
* Sets the string representation of ShareTargetDiscoveryChange
* |discoveryChange|.
* @private
* @param {!ShareTargetDiscoveryChange} discoveryChange
* @return
*/
shareTargetDirectionToString_(discoveryChange) {
switch (discoveryChange) {
case ShareTargetDiscoveryChange.DISCOVERED:
return 'discovered';
break;
case ShareTargetDiscoveryChange.LOST:
return 'lost';
break;
default:
break;
}
},
});
......@@ -1347,6 +1347,8 @@ static_library("ui") {
"webui/nearby_internals/nearby_internals_logs_handler.h",
"webui/nearby_internals/nearby_internals_ui.cc",
"webui/nearby_internals/nearby_internals_ui.h",
"webui/nearby_internals/nearby_internals_ui_trigger_handler.cc",
"webui/nearby_internals/nearby_internals_ui_trigger_handler.h",
"webui/nearby_share/nearby_share_dialog_ui.cc",
"webui/nearby_share/nearby_share_dialog_ui.h",
"webui/nearby_share/shared_resources.cc",
......
......@@ -29,14 +29,14 @@ base::Value GetJavascriptTimestamp() {
// Keys in the JSON representation of a contact message
const char kContactMessageTimeKey[] = "time";
const char kContactMessageContactListChangedKey[] = "contacts_list_changed";
const char kContactMessageContactListChangedKey[] = "contactListChanged";
const char kContactMessageContactsAddedToAllowedListKey[] =
"contacts_added_to_allowlist";
"contactsAddedToAllowlist";
const char kContactMessageContactsRemovedFromAllowedListKey[] =
"contacts_removed_from_allowlist";
const char kContactMessageAllowedIdsKey[] = "allowed_ids";
const char kContactMessageContactsPassedKey[] = "contacts_passed";
const char kContactMessageContactRecordKey[] = "contact_records";
"contactsRemovedFromAllowlist";
const char kContactMessageAllowedIdsKey[] = "allowedIds";
const char kContactMessageContactsPassedKey[] = "contactsPassed";
const char kContactMessageContactRecordKey[] = "contactRecords";
// Converts Contact to a raw dictionary value used as a JSON argument to
// JavaScript functions.
......
......@@ -13,6 +13,7 @@
#include "chrome/browser/ui/webui/nearby_internals/nearby_internals_contact_handler.h"
#include "chrome/browser/ui/webui/nearby_internals/nearby_internals_http_handler.h"
#include "chrome/browser/ui/webui/nearby_internals/nearby_internals_logs_handler.h"
#include "chrome/browser/ui/webui/nearby_internals/nearby_internals_ui_trigger_handler.h"
#include "chrome/browser/ui/webui/webui_util.h"
#include "chrome/common/webui_url_constants.h"
#include "chrome/grit/nearby_internals_resources.h"
......@@ -52,6 +53,8 @@ NearbyInternalsUI::NearbyInternalsUI(content::WebUI* web_ui)
std::make_unique<NearbyInternalsContactHandler>(context));
web_ui->AddMessageHandler(
std::make_unique<NearbyInternalsHttpHandler>(context));
web_ui->AddMessageHandler(
std::make_unique<NearbyInternalsUiTriggerHandler>(context));
}
NearbyInternalsUI::~NearbyInternalsUI() = default;
......
// Copyright 2020 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.
#ifndef CHROME_BROWSER_UI_WEBUI_NEARBY_INTERNALS_NEARBY_INTERNALS_UI_TRIGGER_HANDLER_H_
#define CHROME_BROWSER_UI_WEBUI_NEARBY_INTERNALS_NEARBY_INTERNALS_UI_TRIGGER_HANDLER_H_
#include "base/containers/flat_map.h"
#include "base/memory/weak_ptr.h"
#include "chrome/browser/nearby_sharing/nearby_sharing_service.h"
#include "chrome/browser/nearby_sharing/share_target_discovered_callback.h"
#include "chrome/browser/nearby_sharing/transfer_update_callback.h"
#include "content/public/browser/web_ui_message_handler.h"
namespace base {
class ListValue;
} // namespace base
namespace content {
class BrowserContext;
} // namespace content
// WebUIMessageHandler for to trigger NearbySharingService UI events.
class NearbyInternalsUiTriggerHandler : public content::WebUIMessageHandler,
public TransferUpdateCallback,
public ShareTargetDiscoveredCallback {
public:
explicit NearbyInternalsUiTriggerHandler(content::BrowserContext* context);
NearbyInternalsUiTriggerHandler(const NearbyInternalsUiTriggerHandler&) =
delete;
NearbyInternalsUiTriggerHandler& operator=(
const NearbyInternalsUiTriggerHandler&) = delete;
~NearbyInternalsUiTriggerHandler() override;
// content::WebUIMessageHandler:
void RegisterMessages() override;
// TransferUpdateCallback:
void OnTransferUpdate(const ShareTarget& share_target,
const TransferMetadata& transfer_metadata) override;
// ShareTargetDiscoveryCallback:
void OnShareTargetDiscovered(ShareTarget share_target) override;
void OnShareTargetLost(ShareTarget share_target) override;
private:
// Triggers WebUIListener event after corresponding event is triggered in
// NearbyShareService to pass callback to JavaScript to eventually be
// displayed.
void OnAcceptCalled(NearbySharingService::StatusCodes status_codes);
void OnOpenCalled(NearbySharingService::StatusCodes status_codes);
void OnRejectCalled(NearbySharingService::StatusCodes status_codes);
void OnCancelCalled(NearbySharingService::StatusCodes status_codes);
void OnSendTextCalled(NearbySharingService::StatusCodes status_codes);
// Message handler callback that initializes JavaScript.
void InitializeContents(const base::ListValue* args);
// Message handler callback that triggers SendText in the NearbyShareService.
void SendText(const base::ListValue* args);
// Message handler callback that triggers Accept in the NearbyShareService.
void Accept(const base::ListValue* args);
// Message handler callback that triggers Reject in the NearbyShareService.
void Reject(const base::ListValue* args);
// Message handler callback that triggers Cancel in the NearbyShareService.
void Cancel(const base::ListValue* args);
// Message handler callback that triggers Open in the NearbyShareService.
void Open(const base::ListValue* args);
// Message handler callback that calls RegisterSendSurface in the
// NearbySharingService with a Foreground SendSurfaceState.
// The NearbyInternalsUiTriggerHandler instance acts as the send surface,
// playing the role of both the TransferUpdateCallback and the
// ShareTargetDiscoveredCallback.
void RegisterSendSurfaceForeground(const base::ListValue* args);
// Message handler callback that calls RegisterSendSurface in the
// NearbySharingService with a Background SendSurfaceState.
// The NearbyInternalsUiTriggerHandler instance acts as the send surface,
// playing the role of both the TransferUpdateCallback and the
// ShareTargetDiscoveredCallback.
void RegisterSendSurfaceBackground(const base::ListValue* args);
// Message handler callback that calls UnregisterSendSurface in the
// NearbySharingService. The NearbyInternalsUiTriggerHandler instance acts as
// the send surface to be unregistered.
void UnregisterSendSurface(const base::ListValue* args);
// Message handler callback that calls RegisterReceiveSurface in the
// NearbySharingService with a Foreground receive surface state.
// The NearbyInternalsUiTriggerHandler instance acts as the receive surface,
// playing the role of both the TransferUpdateCallback and the
// ShareTargetDiscoveredCallback.
void RegisterReceiveSurfaceForeground(const base::ListValue* args);
// Message handler callback that calls RegisterReceiveSurface in the
// NearbySharingService with a Background receive surface state.
// The NearbyInternalsUiTriggerHandler instance acts as the receive surface,
// playing the role of both the TransferUpdateCallback and the
// ShareTargetDiscoveredCallback.
void RegisterReceiveSurfaceBackground(const base::ListValue* args);
// Message handler callback that calls UnregisterReceiveSurface in the
// NearbySharingService. The NearbyInternalsUiTriggerHandler instance acts as
// the receive surface to be unregistered.
void UnregisterReceiveSurface(const base::ListValue* args);
content::BrowserContext* const context_;
base::flat_map<std::string, ShareTarget> id_to_share_target_map_;
base::WeakPtrFactory<NearbyInternalsUiTriggerHandler> weak_ptr_factory_{this};
};
#endif // CHROME_BROWSER_UI_WEBUI_NEARBY_INTERNALS_NEARBY_INTERNALS_UI_TRIGGER_HANDLER_H_
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