Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(292)

Unified Diff: chrome/utility/utility_thread.cc

Issue 3043037: Adds IDBKeyPath parser / extractor, and provides a mechanism to call it sandboxed. (Closed)
Patch Set: Makes MSVC happy. Created 10 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « chrome/utility/utility_thread.h ('k') | webkit/glue/idb_bindings.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/utility/utility_thread.cc
diff --git a/chrome/utility/utility_thread.cc b/chrome/utility/utility_thread.cc
index 420df28fbf1ee7c1b8a3988f1c2e85383bb6952d..c759c0dc1b28a8aa5a514f2f4acf3831b91a9371 100644
--- a/chrome/utility/utility_thread.cc
+++ b/chrome/utility/utility_thread.cc
@@ -15,6 +15,7 @@
#include "chrome/common/chrome_paths.h"
#include "chrome/common/extensions/extension_unpacker.h"
#include "chrome/common/extensions/update_manifest.h"
+#include "chrome/common/indexed_db_key.h"
#include "chrome/common/utility_messages.h"
#include "chrome/common/web_resource/web_resource_unpacker.h"
#include "gfx/rect.h"
@@ -22,10 +23,24 @@
#include "printing/page_range.h"
#include "printing/units.h"
#include "third_party/skia/include/core/SkBitmap.h"
+#include "webkit/glue/idb_bindings.h"
#include "webkit/glue/image_decoder.h"
-UtilityThread::UtilityThread() {
+namespace {
+
+template<typename SRC, typename DEST>
+void ConvertVector(const SRC& src, DEST* dest) {
+ dest->reserve(src.size());
+ for (typename SRC::const_iterator i = src.begin(); i != src.end(); ++i)
+ dest->push_back(typename DEST::value_type(*i));
+}
+
+} // namespace
+
+
+UtilityThread::UtilityThread()
+ : batch_mode_(false) {
ChildProcess::current()->AddRefProcess();
}
@@ -40,6 +55,10 @@ void UtilityThread::OnControlMessageReceived(const IPC::Message& msg) {
IPC_MESSAGE_HANDLER(UtilityMsg_DecodeImage, OnDecodeImage)
IPC_MESSAGE_HANDLER(UtilityMsg_RenderPDFPagesToMetafile,
OnRenderPDFPagesToMetafile)
+ IPC_MESSAGE_HANDLER(UtilityMsg_IDBKeysFromValuesAndKeyPath,
+ OnIDBKeysFromValuesAndKeyPath)
+ IPC_MESSAGE_HANDLER(UtilityMsg_BatchMode_Started, OnBatchModeStarted)
+ IPC_MESSAGE_HANDLER(UtilityMsg_BatchMode_Finished, OnBatchModeFinished)
IPC_END_MESSAGE_MAP()
}
@@ -53,7 +72,7 @@ void UtilityThread::OnUnpackExtension(const FilePath& extension_path) {
Send(new UtilityHostMsg_UnpackExtension_Failed(unpacker.error_message()));
}
- ChildProcess::current()->ReleaseProcess();
+ ReleaseProcessIfNeeded();
}
void UtilityThread::OnUnpackWebResource(const std::string& resource_data) {
@@ -69,7 +88,7 @@ void UtilityThread::OnUnpackWebResource(const std::string& resource_data) {
unpacker.error_message()));
}
- ChildProcess::current()->ReleaseProcess();
+ ReleaseProcessIfNeeded();
}
void UtilityThread::OnParseUpdateManifest(const std::string& xml) {
@@ -79,7 +98,7 @@ void UtilityThread::OnParseUpdateManifest(const std::string& xml) {
} else {
Send(new UtilityHostMsg_ParseUpdateManifest_Succeeded(manifest.results()));
}
- ChildProcess::current()->ReleaseProcess();
+ ReleaseProcessIfNeeded();
}
void UtilityThread::OnDecodeImage(
@@ -92,7 +111,7 @@ void UtilityThread::OnDecodeImage(
} else {
Send(new UtilityHostMsg_DecodeImage_Succeeded(decoded_image));
}
- ChildProcess::current()->ReleaseProcess();
+ ReleaseProcessIfNeeded();
}
@@ -116,7 +135,7 @@ void UtilityThread::OnRenderPDFPagesToMetafile(
if (!succeeded) {
Send(new UtilityHostMsg_RenderPDFPagesToMetafile_Failed());
}
- ChildProcess::current()->ReleaseProcess();
+ ReleaseProcessIfNeeded();
}
#if defined(OS_WIN)
@@ -253,3 +272,35 @@ bool UtilityThread::RenderPDFToWinMetafile(
return ret;
}
#endif // defined(OS_WIN)
+
+void UtilityThread::OnIDBKeysFromValuesAndKeyPath(
+ int id,
+ const std::vector<SerializedScriptValue>& serialized_script_values,
+ const string16& idb_key_path) {
+ std::vector<WebKit::WebSerializedScriptValue> web_values;
+ ConvertVector(serialized_script_values, &web_values);
+ std::vector<WebKit::WebIDBKey> web_keys;
+ bool error = webkit_glue::IDBKeysFromValuesAndKeyPath(
+ web_values, idb_key_path, &web_keys);
+ if (error) {
+ Send(new UtilityHostMsg_IDBKeysFromValuesAndKeyPath_Failed(id));
+ return;
+ }
+ std::vector<IndexedDBKey> keys;
+ ConvertVector(web_keys, &keys);
+ Send(new UtilityHostMsg_IDBKeysFromValuesAndKeyPath_Succeeded(id, keys));
+ ReleaseProcessIfNeeded();
+}
+
+void UtilityThread::OnBatchModeStarted() {
+ batch_mode_ = true;
+}
+
+void UtilityThread::OnBatchModeFinished() {
+ ChildProcess::current()->ReleaseProcess();
+}
+
+void UtilityThread::ReleaseProcessIfNeeded() {
+ if (!batch_mode_)
+ ChildProcess::current()->ReleaseProcess();
+}
« no previous file with comments | « chrome/utility/utility_thread.h ('k') | webkit/glue/idb_bindings.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698