devtools: handle file system indexing requests
This commit is contained in:
parent
f58b3f853e
commit
53ac79cb19
2 changed files with 150 additions and 3 deletions
|
@ -145,6 +145,13 @@ std::set<std::string> GetAddedFileSystemPaths(
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool IsDevToolsFileSystemAdded(
|
||||||
|
content::WebContents* web_contents,
|
||||||
|
const std::string& file_system_path) {
|
||||||
|
auto file_system_paths = GetAddedFileSystemPaths(web_contents);
|
||||||
|
return file_system_paths.find(file_system_path) != file_system_paths.end();
|
||||||
|
}
|
||||||
|
|
||||||
content::SecurityStyle SecurityLevelToSecurityStyle(
|
content::SecurityStyle SecurityLevelToSecurityStyle(
|
||||||
SecurityStateModel::SecurityLevel security_level) {
|
SecurityStateModel::SecurityLevel security_level) {
|
||||||
switch (security_level) {
|
switch (security_level) {
|
||||||
|
@ -167,7 +174,8 @@ content::SecurityStyle SecurityLevelToSecurityStyle(
|
||||||
|
|
||||||
CommonWebContentsDelegate::CommonWebContentsDelegate()
|
CommonWebContentsDelegate::CommonWebContentsDelegate()
|
||||||
: html_fullscreen_(false),
|
: html_fullscreen_(false),
|
||||||
native_fullscreen_(false) {
|
native_fullscreen_(false),
|
||||||
|
devtools_file_system_indexer_(new DevToolsFileSystemIndexer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
CommonWebContentsDelegate::~CommonWebContentsDelegate() {
|
CommonWebContentsDelegate::~CommonWebContentsDelegate() {
|
||||||
|
@ -456,8 +464,7 @@ void CommonWebContentsDelegate::DevToolsAddFileSystem(
|
||||||
|
|
||||||
std::string file_system_id = RegisterFileSystem(GetDevToolsWebContents(),
|
std::string file_system_id = RegisterFileSystem(GetDevToolsWebContents(),
|
||||||
path);
|
path);
|
||||||
auto file_system_paths = GetAddedFileSystemPaths(GetDevToolsWebContents());
|
if (IsDevToolsFileSystemAdded(GetDevToolsWebContents(), path.AsUTF8Unsafe()))
|
||||||
if (file_system_paths.find(path.AsUTF8Unsafe()) != file_system_paths.end())
|
|
||||||
return;
|
return;
|
||||||
|
|
||||||
FileSystem file_system = CreateFileSystemStruct(GetDevToolsWebContents(),
|
FileSystem file_system = CreateFileSystemStruct(GetDevToolsWebContents(),
|
||||||
|
@ -495,6 +502,61 @@ void CommonWebContentsDelegate::DevToolsRemoveFileSystem(
|
||||||
nullptr, nullptr);
|
nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommonWebContentsDelegate::DevToolsIndexPath(
|
||||||
|
int request_id,
|
||||||
|
const std::string& file_system_path) {
|
||||||
|
if (!IsDevToolsFileSystemAdded(GetDevToolsWebContents(), file_system_path)) {
|
||||||
|
OnDevToolsIndexingDone(request_id, file_system_path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
if (devtools_indexing_jobs_.count(request_id) != 0)
|
||||||
|
return;
|
||||||
|
devtools_indexing_jobs_[request_id] =
|
||||||
|
scoped_refptr<DevToolsFileSystemIndexer::FileSystemIndexingJob>(
|
||||||
|
devtools_file_system_indexer_->IndexPath(
|
||||||
|
file_system_path,
|
||||||
|
base::Bind(
|
||||||
|
&CommonWebContentsDelegate::OnDevToolsIndexingWorkCalculated,
|
||||||
|
base::Unretained(this),
|
||||||
|
request_id,
|
||||||
|
file_system_path),
|
||||||
|
base::Bind(&CommonWebContentsDelegate::OnDevToolsIndexingWorked,
|
||||||
|
base::Unretained(this),
|
||||||
|
request_id,
|
||||||
|
file_system_path),
|
||||||
|
base::Bind(&CommonWebContentsDelegate::OnDevToolsIndexingDone,
|
||||||
|
base::Unretained(this),
|
||||||
|
request_id,
|
||||||
|
file_system_path)));
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommonWebContentsDelegate::DevToolsStopIndexing(int request_id) {
|
||||||
|
auto it = devtools_indexing_jobs_.find(request_id);
|
||||||
|
if (it == devtools_indexing_jobs_.end())
|
||||||
|
return;
|
||||||
|
it->second->Stop();
|
||||||
|
devtools_indexing_jobs_.erase(it);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommonWebContentsDelegate::DevToolsSearchInPath(
|
||||||
|
int request_id,
|
||||||
|
const std::string& file_system_path,
|
||||||
|
const std::string& query) {
|
||||||
|
if (!IsDevToolsFileSystemAdded(GetDevToolsWebContents(), file_system_path)) {
|
||||||
|
OnDevToolsSearchCompleted(request_id,
|
||||||
|
file_system_path,
|
||||||
|
std::vector<std::string>());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
devtools_file_system_indexer_->SearchInPath(
|
||||||
|
file_system_path,
|
||||||
|
query,
|
||||||
|
base::Bind(&CommonWebContentsDelegate::OnDevToolsSearchCompleted,
|
||||||
|
base::Unretained(this),
|
||||||
|
request_id,
|
||||||
|
file_system_path));
|
||||||
|
}
|
||||||
|
|
||||||
void CommonWebContentsDelegate::OnDevToolsSaveToFile(
|
void CommonWebContentsDelegate::OnDevToolsSaveToFile(
|
||||||
const std::string& url) {
|
const std::string& url) {
|
||||||
// Notify DevTools.
|
// Notify DevTools.
|
||||||
|
@ -511,6 +573,61 @@ void CommonWebContentsDelegate::OnDevToolsAppendToFile(
|
||||||
"DevToolsAPI.appendedToURL", &url_value, nullptr, nullptr);
|
"DevToolsAPI.appendedToURL", &url_value, nullptr, nullptr);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CommonWebContentsDelegate::OnDevToolsIndexingWorkCalculated(
|
||||||
|
int request_id,
|
||||||
|
const std::string& file_system_path,
|
||||||
|
int total_work) {
|
||||||
|
base::FundamentalValue request_id_value(request_id);
|
||||||
|
base::StringValue file_system_path_value(file_system_path);
|
||||||
|
base::FundamentalValue total_work_value(total_work);
|
||||||
|
web_contents_->CallClientFunction("DevToolsAPI.indexingTotalWorkCalculated",
|
||||||
|
&request_id_value,
|
||||||
|
&file_system_path_value,
|
||||||
|
&total_work_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommonWebContentsDelegate::OnDevToolsIndexingWorked(
|
||||||
|
int request_id,
|
||||||
|
const std::string& file_system_path,
|
||||||
|
int worked) {
|
||||||
|
base::FundamentalValue request_id_value(request_id);
|
||||||
|
base::StringValue file_system_path_value(file_system_path);
|
||||||
|
base::FundamentalValue worked_value(worked);
|
||||||
|
web_contents_->CallClientFunction("DevToolsAPI.indexingWorked",
|
||||||
|
&request_id_value,
|
||||||
|
&file_system_path_value,
|
||||||
|
&worked_value);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommonWebContentsDelegate::OnDevToolsIndexingDone(
|
||||||
|
int request_id,
|
||||||
|
const std::string& file_system_path) {
|
||||||
|
devtools_indexing_jobs_.erase(request_id);
|
||||||
|
base::FundamentalValue request_id_value(request_id);
|
||||||
|
base::StringValue file_system_path_value(file_system_path);
|
||||||
|
web_contents_->CallClientFunction("DevToolsAPI.indexingDone",
|
||||||
|
&request_id_value,
|
||||||
|
&file_system_path_value,
|
||||||
|
nullptr);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CommonWebContentsDelegate::OnDevToolsSearchCompleted(
|
||||||
|
int request_id,
|
||||||
|
const std::string& file_system_path,
|
||||||
|
const std::vector<std::string>& file_paths) {
|
||||||
|
base::ListValue file_paths_value;
|
||||||
|
for (std::vector<std::string>::const_iterator it(file_paths.begin());
|
||||||
|
it != file_paths.end(); ++it) {
|
||||||
|
file_paths_value.AppendString(*it);
|
||||||
|
}
|
||||||
|
base::FundamentalValue request_id_value(request_id);
|
||||||
|
base::StringValue file_system_path_value(file_system_path);
|
||||||
|
web_contents_->CallClientFunction("DevToolsAPI.searchCompleted",
|
||||||
|
&request_id_value,
|
||||||
|
&file_system_path_value,
|
||||||
|
&file_paths_value);
|
||||||
|
}
|
||||||
|
|
||||||
#if defined(TOOLKIT_VIEWS)
|
#if defined(TOOLKIT_VIEWS)
|
||||||
gfx::ImageSkia CommonWebContentsDelegate::GetDevToolsWindowIcon() {
|
gfx::ImageSkia CommonWebContentsDelegate::GetDevToolsWindowIcon() {
|
||||||
if (!owner_window())
|
if (!owner_window())
|
||||||
|
|
|
@ -12,8 +12,11 @@
|
||||||
#include "brightray/browser/inspectable_web_contents_impl.h"
|
#include "brightray/browser/inspectable_web_contents_impl.h"
|
||||||
#include "brightray/browser/inspectable_web_contents_delegate.h"
|
#include "brightray/browser/inspectable_web_contents_delegate.h"
|
||||||
#include "brightray/browser/inspectable_web_contents_view_delegate.h"
|
#include "brightray/browser/inspectable_web_contents_view_delegate.h"
|
||||||
|
#include "brightray/browser/devtools_file_system_indexer.h"
|
||||||
#include "content/public/browser/web_contents_delegate.h"
|
#include "content/public/browser/web_contents_delegate.h"
|
||||||
|
|
||||||
|
using brightray::DevToolsFileSystemIndexer;
|
||||||
|
|
||||||
namespace atom {
|
namespace atom {
|
||||||
|
|
||||||
class AtomJavaScriptDialogManager;
|
class AtomJavaScriptDialogManager;
|
||||||
|
@ -90,6 +93,12 @@ class CommonWebContentsDelegate
|
||||||
void DevToolsAddFileSystem(const base::FilePath& path) override;
|
void DevToolsAddFileSystem(const base::FilePath& path) override;
|
||||||
void DevToolsRemoveFileSystem(
|
void DevToolsRemoveFileSystem(
|
||||||
const base::FilePath& file_system_path) override;
|
const base::FilePath& file_system_path) override;
|
||||||
|
void DevToolsIndexPath(int request_id,
|
||||||
|
const std::string& file_system_path) override;
|
||||||
|
void DevToolsStopIndexing(int request_id) override;
|
||||||
|
void DevToolsSearchInPath(int request_id,
|
||||||
|
const std::string& file_system_path,
|
||||||
|
const std::string& query) override;
|
||||||
|
|
||||||
// brightray::InspectableWebContentsViewDelegate:
|
// brightray::InspectableWebContentsViewDelegate:
|
||||||
#if defined(TOOLKIT_VIEWS)
|
#if defined(TOOLKIT_VIEWS)
|
||||||
|
@ -107,6 +116,19 @@ class CommonWebContentsDelegate
|
||||||
// Callback for when DevToolsAppendToFile has completed.
|
// Callback for when DevToolsAppendToFile has completed.
|
||||||
void OnDevToolsAppendToFile(const std::string& url);
|
void OnDevToolsAppendToFile(const std::string& url);
|
||||||
|
|
||||||
|
//
|
||||||
|
void OnDevToolsIndexingWorkCalculated(int request_id,
|
||||||
|
const std::string& file_system_path,
|
||||||
|
int total_work);
|
||||||
|
void OnDevToolsIndexingWorked(int request_id,
|
||||||
|
const std::string& file_system_path,
|
||||||
|
int worked);
|
||||||
|
void OnDevToolsIndexingDone(int request_id,
|
||||||
|
const std::string& file_system_path);
|
||||||
|
void OnDevToolsSearchCompleted(int request_id,
|
||||||
|
const std::string& file_system_path,
|
||||||
|
const std::vector<std::string>& file_paths);
|
||||||
|
|
||||||
// Set fullscreen mode triggered by html api.
|
// Set fullscreen mode triggered by html api.
|
||||||
void SetHtmlApiFullscreen(bool enter_fullscreen);
|
void SetHtmlApiFullscreen(bool enter_fullscreen);
|
||||||
|
|
||||||
|
@ -121,6 +143,7 @@ class CommonWebContentsDelegate
|
||||||
|
|
||||||
scoped_ptr<WebDialogHelper> web_dialog_helper_;
|
scoped_ptr<WebDialogHelper> web_dialog_helper_;
|
||||||
scoped_ptr<AtomJavaScriptDialogManager> dialog_manager_;
|
scoped_ptr<AtomJavaScriptDialogManager> dialog_manager_;
|
||||||
|
scoped_refptr<DevToolsFileSystemIndexer> devtools_file_system_indexer_;
|
||||||
|
|
||||||
// The stored InspectableWebContents object.
|
// The stored InspectableWebContents object.
|
||||||
// Notice that web_contents_ must be placed after dialog_manager_, so we can
|
// Notice that web_contents_ must be placed after dialog_manager_, so we can
|
||||||
|
@ -132,6 +155,13 @@ class CommonWebContentsDelegate
|
||||||
typedef std::map<std::string, base::FilePath> PathsMap;
|
typedef std::map<std::string, base::FilePath> PathsMap;
|
||||||
PathsMap saved_files_;
|
PathsMap saved_files_;
|
||||||
|
|
||||||
|
// Map id to index job, used for file system indexing requests from devtools.
|
||||||
|
typedef std::map<
|
||||||
|
int,
|
||||||
|
scoped_refptr<DevToolsFileSystemIndexer::FileSystemIndexingJob>>
|
||||||
|
DevToolsIndexingJobsMap;
|
||||||
|
DevToolsIndexingJobsMap devtools_indexing_jobs_;
|
||||||
|
|
||||||
DISALLOW_COPY_AND_ASSIGN(CommonWebContentsDelegate);
|
DISALLOW_COPY_AND_ASSIGN(CommonWebContentsDelegate);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue