Skip to content
This repository has been archived by the owner on Nov 27, 2018. It is now read-only.

Intents

Marshall T. Rose edited this page Oct 15, 2015 · 3 revisions

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:

Design Notes

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.

Clone this wiki locally