protocol: fix registerStandardSchemes api
authordeepak1556 <hop2deep@gmail.com>
Thu, 5 May 2016 18:34:16 +0000 (00:04 +0530)
committerdeepak1556 <hop2deep@gmail.com>
Sat, 7 May 2016 20:06:34 +0000 (01:36 +0530)
atom/app/atom_content_client.cc
atom/browser/api/atom_api_protocol.cc
atom/browser/atom_browser_client.cc
atom/browser/atom_browser_client.h
atom/common/options_switches.cc
atom/common/options_switches.h
spec/api-protocol-spec.js
spec/fixtures/pages/b.html

index 25e9d0f..8f59c77 100644 (file)
@@ -183,13 +183,6 @@ base::string16 AtomContentClient::GetLocalizedString(int message_id) const {
 void AtomContentClient::AddAdditionalSchemes(
     std::vector<url::SchemeWithType>* standard_schemes,
     std::vector<std::string>* savable_schemes) {
-  std::vector<std::string> schemes;
-  ConvertStringWithSeparatorToVector(&schemes, ",",
-                                     switches::kRegisterStandardSchemes);
-  if (!schemes.empty()) {
-    for (const std::string& scheme : schemes)
-      standard_schemes->push_back({scheme.c_str(), url::SCHEME_WITHOUT_PORT});
-  }
   standard_schemes->push_back({"chrome-extension", url::SCHEME_WITHOUT_PORT});
 }
 
index 3835fac..115a3c5 100644 (file)
@@ -15,6 +15,7 @@
 #include "atom/common/native_mate_converters/net_converter.h"
 #include "atom/common/node_includes.h"
 #include "native_mate/dictionary.h"
+#include "url/url_util.h"
 
 using content::BrowserThread;
 
@@ -31,7 +32,8 @@ Protocol::Protocol(v8::Isolate* isolate, AtomBrowserContext* browser_context)
 
 void Protocol::RegisterStandardSchemes(
     const std::vector<std::string>& schemes) {
-  atom::AtomBrowserClient::SetCustomSchemes(schemes);
+  for (const auto& scheme : schemes)
+    url::AddStandardScheme(scheme.c_str(), url::SCHEME_WITHOUT_PORT);
 }
 
 void Protocol::RegisterServiceWorkerSchemes(
index f4add58..8ecd37a 100644 (file)
@@ -49,8 +49,6 @@ namespace {
 // Next navigation should not restart renderer process.
 bool g_suppress_renderer_process_restart = false;
 
-// Custom schemes to be registered to standard.
-std::string g_custom_schemes = "";
 // Custom schemes to be registered to handle service worker.
 std::string g_custom_service_worker_schemes = "";
 
@@ -61,11 +59,6 @@ void AtomBrowserClient::SuppressRendererProcessRestartForOnce() {
   g_suppress_renderer_process_restart = true;
 }
 
-void AtomBrowserClient::SetCustomSchemes(
-    const std::vector<std::string>& schemes) {
-  g_custom_schemes = base::JoinString(schemes, ",");
-}
-
 void AtomBrowserClient::SetCustomServiceWorkerSchemes(
     const std::vector<std::string>& schemes) {
   g_custom_service_worker_schemes = base::JoinString(schemes, ",");
@@ -153,11 +146,6 @@ void AtomBrowserClient::AppendExtraCommandLineSwitches(
   if (process_type != "renderer")
     return;
 
-  // The registered standard schemes.
-  if (!g_custom_schemes.empty())
-    command_line->AppendSwitchASCII(switches::kRegisterStandardSchemes,
-                                    g_custom_schemes);
-
   // The registered service worker schemes.
   if (!g_custom_service_worker_schemes.empty())
     command_line->AppendSwitchASCII(switches::kRegisterServiceWorkerSchemes,
index 5354e14..ef5fd5a 100644 (file)
@@ -36,8 +36,7 @@ class AtomBrowserClient : public brightray::BrowserClient,
 
   // Don't force renderer process to restart for once.
   static void SuppressRendererProcessRestartForOnce();
-  // Custom schemes to be registered to standard.
-  static void SetCustomSchemes(const std::vector<std::string>& schemes);
+
   // Custom schemes to be registered to handle service worker.
   static void SetCustomServiceWorkerSchemes(
       const std::vector<std::string>& schemes);
index 166942d..de130ee 100644 (file)
@@ -125,9 +125,6 @@ const char kPpapiFlashVersion[] = "ppapi-flash-version";
 // Disable HTTP cache.
 const char kDisableHttpCache[] = "disable-http-cache";
 
-// Register schemes to standard.
-const char kRegisterStandardSchemes[] = "register-standard-schemes";
-
 // Register schemes to handle service worker.
 const char kRegisterServiceWorkerSchemes[] = "register-service-worker-schemes";
 
index 653f35a..fadde79 100644 (file)
@@ -70,7 +70,6 @@ extern const char kEnablePlugins[];
 extern const char kPpapiFlashPath[];
 extern const char kPpapiFlashVersion[];
 extern const char kDisableHttpCache[];
-extern const char kRegisterStandardSchemes[];
 extern const char kRegisterServiceWorkerSchemes[];
 extern const char kSSLVersionFallbackMin[];
 extern const char kCipherSuiteBlacklist[];
index 9f2a25e..c84d5be 100644 (file)
@@ -3,6 +3,7 @@ const http = require('http')
 const path = require('path')
 const qs = require('querystring')
 const remote = require('electron').remote
+const BrowserWindow = remote.require('electron').BrowserWindow
 const protocol = remote.require('electron').protocol
 
 describe('protocol module', function () {
@@ -344,6 +345,7 @@ describe('protocol module', function () {
         })
       })
     })
+
     it('sends object as response', function (done) {
       var handler = function (request, callback) {
         callback({
@@ -394,7 +396,7 @@ describe('protocol module', function () {
       var handler = function (request, callback) {
         callback(fakeFilePath)
       }
-      protocol.registerBufferProtocol(protocolName, handler, function (error) {
+      protocol.registerFileProtocol(protocolName, handler, function (error) {
         if (error) {
           return done(error)
         }
@@ -415,7 +417,7 @@ describe('protocol module', function () {
       var handler = function (request, callback) {
         callback(new Date())
       }
-      protocol.registerBufferProtocol(protocolName, handler, function (error) {
+      protocol.registerFileProtocol(protocolName, handler, function (error) {
         if (error) {
           return done(error)
         }
@@ -814,4 +816,78 @@ describe('protocol module', function () {
       })
     })
   })
+
+  describe('protocol.registerStandardSchemes', function () {
+    const standardScheme = 'app'
+    const origin = standardScheme + '://fake-host'
+    const imageURL = origin + '/test.png'
+    const filePath = path.join(__dirname, 'fixtures', 'pages', 'b.html')
+    const fileContent = '<img src="/test.png" />'
+    var w = null
+    var success = null
+
+    before(function () {
+      protocol.registerStandardSchemes([standardScheme])
+    })
+
+    beforeEach(function () {
+      w = new BrowserWindow({show: false})
+      success = false
+    })
+
+    afterEach(function (done) {
+      protocol.unregisterProtocol(standardScheme, function () {
+        if (w != null) {
+          w.destroy()
+        }
+        w = null
+        done()
+      })
+    })
+
+    it('resolves relative resources', function (done) {
+      var handler = function (request, callback) {
+        if (request.url === imageURL) {
+          success = true
+          callback()
+        } else {
+          callback(filePath)
+        }
+      }
+      protocol.registerFileProtocol(standardScheme, handler, function (error) {
+        if (error) {
+          return done(error)
+        }
+        w.webContents.on('did-finish-load', function () {
+          assert(success)
+          done()
+        })
+        w.loadURL(origin)
+      })
+    })
+
+    it('resolves absolute resources', function (done) {
+      var handler = function (request, callback) {
+        if (request.url === imageURL) {
+          success = true
+          callback()
+        } else {
+          callback({
+            data: fileContent,
+            mimeType: 'text/html'
+          })
+        }
+      }
+      protocol.registerStringProtocol(standardScheme, handler, function (error) {
+        if (error) {
+          return done(error)
+        }
+        w.webContents.on('did-finish-load', function () {
+          assert(success)
+          done()
+        })
+        w.loadURL(origin)
+      })
+    })
+  })
 })
index 812431f..d35c863 100644 (file)
@@ -1,8 +1,8 @@
 <html>
 <body>
+<img src="./test.png" />
 <script type="text/javascript" charset="utf-8">
   console.log('b');
 </script>
 </body>
 </html>
-