-
Notifications
You must be signed in to change notification settings - Fork 18
Intents
Brave will log intent signals to be stored in the Vault. What's an intent signal? Lots of user actions. The following is a list of intent signals, as well as the intent keys that they will be captured under in the vault.
Page Visits
Triggered when a new page loads. This will happen either via direct user navigation (typing into the url bar), or when clicking on links.
{
"type": "browser.site.visit",
"timestamp": new Date().getTime(),
"payload": {
"url": "http://..."
}
}
Page Exits
Triggered when a user leaves a page either by closing the tab, or navigating to a new page. This contains the known amount of time on the page.
{
"type": "browser.site.exit",
"timestamp": new Date().getTime(),
"payload": {
"url": "http://...",
"time": 100000
}
}
Context Menu
Triggered when the user uses an option in a context menu.
{
"type": "browser.site.contextmenu",
"timestamp": new Date().getTime(),
"payload": {
"href": "http://...",
"action": "download|newtab|newwindow|tag",
"type": "image|video|audio|link|element"
}
}
Form Submission
Triggered when the user submits a form.
{
"type": "browser.form.submit",
"timestamp": new Date().getTime(),
"payload": {
"href": "http://...",
"locator": "#css.selector",
"values": {}
}
}
Form Save
Triggered when the user saves form information for later editing/autofilling.
{
"type": "browser.form.save",
"timestamp": new Date().getTime(),
"payload": {
"href": "http://...",
"locator": "#css.selector",
"data": {
"field1": "Form Data Here"
}
}
}
Form Autofill
Triggered when the user autofills a form.
{
"type": "browser.form.autofill",
"timestamp": new Date().getTime(),
"payload": {
"href": "http://...",
"locator": "#css.selector",
"lookupId": "possibly.links.to.a.record"
}
}
Bookmarking, site tagging
Triggered when the user tags a site through some action like bookmarking or adding the site to a reading list.
{
"type": "browser.site.tag",
"timestamp": new Date().getTime(),
"payload": {
"url": "http://...",
"tag": "bookmark"
}
}
Search Suggestion Selection
Triggered when the user selects a search suggestion from the url bar, intending to navigate to that url.
{
"type": "browser.suggestion.visit",
"timestamp": new Date().getTime(),
"payload": {
"url": "http://...",
"terms": "my entered search term",
"source": "bookmarks|history|searchprovider"
}
}
Opening the browser
When a browser window is opened.
{
"type": "browser.app.open",
"timestamp": new Date().getTime(),
"payload": {
"windowId": "someid"
}
}
Closing the browser
When a browser window is closed.
{
"type": "browser.app.close",
"timestamp": new Date().getTime(),
"payload": {
"windowId": "someid"
}
}
Minimizing the browser
When a browser window is minimized.
{
"type": "browser.app.minimize",
"timestamp": new Date().getTime(),
"payload": {
"windowId": "someid"
}
}
Maximizing the browser
When a browser window is maximized.
{
"type": "browser.app.maximize",
"timestamp": new Date().getTime(),
"payload": {
"windowId": "someid",
"fullscreen": true
}
}
TODO:
- Scrolling ad and other content into and out of view.
- Eye tracking (see https://github.com/wallarelvo/camgaze.js/tree/master).
- Idle time based on all input devices.
We may not know how to condense or abstract this log into a user model for better high-privacy ads and other economic actions, in advance. We may need to do machine learning (and human learning among ourselves) to get the right reductions in place. And the "right reductions" will change over time.
Therefore one idea is to log everything, compressed and in the brackground, and dump it into big log files in S3 buckets. Use AWS spot instances since we don't care about latency. Worry about reliability (TODO, lol).
Then instead of a NoSQL DB with its own consistency and abstraction costs, the Vault becomes a personal data mine of log files. The challenge at lowest level is to process log files. See https://github.com/mozilla-services/heka for one way to do this.