From 89b4aa5d62237f36fac9dcce9c546005ec18968b Mon Sep 17 00:00:00 2001
From: bitpshr <mail@bitpshr.net>
Date: Mon, 1 Oct 2018 20:52:31 -0400
Subject: EIP-1102: Add option to force-enable provider

---
 app/scripts/controllers/provider-approval.js | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

(limited to 'app/scripts/controllers/provider-approval.js')

diff --git a/app/scripts/controllers/provider-approval.js b/app/scripts/controllers/provider-approval.js
index e9b1b8e16..8c7520d59 100644
--- a/app/scripts/controllers/provider-approval.js
+++ b/app/scripts/controllers/provider-approval.js
@@ -1,4 +1,5 @@
 const ObservableStore = require('obs-store')
+const extension = require('extensionizer')
 
 /**
  * A controller that services user-approved requests for a full Ethereum provider API
@@ -26,9 +27,9 @@ class ProviderApprovalController {
    *
    * @param {string} origin - Origin of the window requesting full provider access
    */
-  handleProviderRequest (origin) {
+  async handleProviderRequest (origin) {
     this.store.updateState({ providerRequests: [{ origin }] })
-    if (this.approvedOrigins[origin]) {
+    if (await this.isApproved(origin)) {
       this.approveProviderRequest(origin)
       return
     }
@@ -68,6 +69,7 @@ class ProviderApprovalController {
    */
   clearApprovedOrigins () {
     this.approvedOrigins = {}
+    extension.storage.local.set({ forcedOrigins: [] })
   }
 
   /**
@@ -77,7 +79,18 @@ class ProviderApprovalController {
    * @returns {boolean} - True if the origin has been approved
    */
   isApproved (origin) {
-    return this.approvedOrigins[origin]
+    return new Promise(resolve => {
+      extension.storage.local.get(['forcedOrigins'], ({ forcedOrigins = [] }) => {
+        resolve(this.approvedOrigins[origin] || forcedOrigins.indexOf(origin) > -1)
+      })
+    })
+  }
+
+  /**
+   * Called when a user forces the exposure of a full Ethereum provider API
+   */
+  forceInjection () {
+    this.platform.sendMessage({ action: 'force-injection' }, { active: true })
   }
 }
 
-- 
cgit