Instead of doing this via http, we're going to have to change this to use message passing between a worker running in the browser's chrome (i.e., the extension code) and your content script running in the page.  The basic structure will be something like this:

```javascript
// Wait for the extension to tell us to setup the UI and pass us the css/html
self.port.on("setup-ui", function(resources) {
  // resources is an object with HTML (string) and CSS (string)
  // to be inflated into this DOM.  I have code to do all this already.

  // Wait for a message from the extension with all the page data
  self.port.on("display-data", function(pageData) {
    // pageData is a JS object similar to the schema you have.
    // Here you can pick out the data and do whatever you want
    // in your UI with angular.
  });

  // Let the extension worker know that our UI is ready (DOM built)
  // and we can accept the data via a display-data message
  self.port.emit("ui-ready");
});
```