Merge pull request #1199 from deepak1556/protocol_asar_patch
read files from asar archives in custom protocol
This commit is contained in:
commit
bb0e68e563
2 changed files with 46 additions and 7 deletions
|
@ -6,6 +6,8 @@
|
||||||
|
|
||||||
#include "base/threading/sequenced_worker_pool.h"
|
#include "base/threading/sequenced_worker_pool.h"
|
||||||
#include "atom/browser/net/url_request_string_job.h"
|
#include "atom/browser/net/url_request_string_job.h"
|
||||||
|
#include "atom/browser/net/asar/url_request_asar_job.h"
|
||||||
|
#include "atom/common/asar/asar_util.h"
|
||||||
#include "content/public/browser/browser_thread.h"
|
#include "content/public/browser/browser_thread.h"
|
||||||
#include "net/base/net_errors.h"
|
#include "net/base/net_errors.h"
|
||||||
#include "net/url_request/url_request_error_job.h"
|
#include "net/url_request/url_request_error_job.h"
|
||||||
|
@ -88,13 +90,33 @@ void AdapterRequestJob::CreateStringJobAndStart(const std::string& mime_type,
|
||||||
void AdapterRequestJob::CreateFileJobAndStart(const base::FilePath& path) {
|
void AdapterRequestJob::CreateFileJobAndStart(const base::FilePath& path) {
|
||||||
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
DCHECK(content::BrowserThread::CurrentlyOn(content::BrowserThread::IO));
|
||||||
|
|
||||||
real_job_ = new net::URLRequestFileJob(
|
base::FilePath asar_path, relative_path;
|
||||||
request(),
|
if (!asar::GetAsarArchivePath(path, &asar_path, &relative_path)) {
|
||||||
network_delegate(),
|
real_job_ = new net::URLRequestFileJob(
|
||||||
path,
|
request(),
|
||||||
content::BrowserThread::GetBlockingPool()->
|
network_delegate(),
|
||||||
GetTaskRunnerWithShutdownBehavior(
|
path,
|
||||||
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
|
content::BrowserThread::GetBlockingPool()->
|
||||||
|
GetTaskRunnerWithShutdownBehavior(
|
||||||
|
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
|
||||||
|
} else {
|
||||||
|
auto archive = asar::GetOrCreateAsarArchive(asar_path);
|
||||||
|
if (!archive)
|
||||||
|
real_job_ = new net::URLRequestErrorJob(
|
||||||
|
request(),
|
||||||
|
network_delegate(),
|
||||||
|
net::ERR_FILE_NOT_FOUND);
|
||||||
|
|
||||||
|
real_job_ = new asar::URLRequestAsarJob(
|
||||||
|
request(),
|
||||||
|
network_delegate(),
|
||||||
|
archive,
|
||||||
|
relative_path,
|
||||||
|
content::BrowserThread::GetBlockingPool()->
|
||||||
|
GetTaskRunnerWithShutdownBehavior(
|
||||||
|
base::SequencedWorkerPool::SKIP_ON_SHUTDOWN));
|
||||||
|
}
|
||||||
|
|
||||||
real_job_->Start();
|
real_job_->Start();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -74,6 +74,23 @@ describe 'protocol module', ->
|
||||||
assert false, 'Got error: ' + errorType + ' ' + error
|
assert false, 'Got error: ' + errorType + ' ' + error
|
||||||
protocol.unregisterProtocol 'atom-file-job'
|
protocol.unregisterProtocol 'atom-file-job'
|
||||||
|
|
||||||
|
it 'returns RequestFileJob should send file from asar archive', (done) ->
|
||||||
|
p = path.join __dirname, 'fixtures', 'asar', 'a.asar', 'file1'
|
||||||
|
job = new protocol.RequestFileJob(p)
|
||||||
|
handler = remote.createFunctionWithReturnValue job
|
||||||
|
protocol.registerProtocol 'atom-file-job', handler
|
||||||
|
|
||||||
|
$.ajax
|
||||||
|
url: 'atom-file-job://' + p
|
||||||
|
success: (data) ->
|
||||||
|
content = require('fs').readFileSync(p)
|
||||||
|
assert.equal data, String(content)
|
||||||
|
protocol.unregisterProtocol 'atom-file-job'
|
||||||
|
done()
|
||||||
|
error: (xhr, errorType, error) ->
|
||||||
|
assert false, 'Got error: ' + errorType + ' ' + error
|
||||||
|
protocol.unregisterProtocol 'atom-file-job'
|
||||||
|
|
||||||
describe 'protocol.isHandledProtocol', ->
|
describe 'protocol.isHandledProtocol', ->
|
||||||
it 'returns true if the scheme can be handled', ->
|
it 'returns true if the scheme can be handled', ->
|
||||||
assert.equal protocol.isHandledProtocol('file'), true
|
assert.equal protocol.isHandledProtocol('file'), true
|
||||||
|
|
Loading…
Reference in a new issue