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

Unified Diff: chrome/browser/guest_view/guest_view_manager.cc

Issue 299753011: Move allocate instance id to chrome/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Address comments from fady Created 6 years, 7 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
Index: chrome/browser/guest_view/guest_view_manager.cc
diff --git a/chrome/browser/guest_view/guest_view_manager.cc b/chrome/browser/guest_view/guest_view_manager.cc
index efd5708e35a70a7899c6c65080c61eb31e832eaf..f3a74dfbdfecc8070f3d4c0397760c0aef7a2eb3 100644
--- a/chrome/browser/guest_view/guest_view_manager.cc
+++ b/chrome/browser/guest_view/guest_view_manager.cc
@@ -23,6 +23,38 @@ using content::BrowserContext;
using content::SiteInstance;
using content::WebContents;
+namespace {
+
+void ParsePartitionParam(const std::string& partition_str,
Fady Samuel 2014/06/03 16:36:34 This seems like a <webview> feature. Can we move t
lazyboy 2014/06/03 19:17:58 I've moved the utility function to web_view_guest.
+ std::string* storage_partition_id,
+ bool* persist_storage) {
+ // Since the "persist:" prefix is in ASCII, StartsWith will work fine on
+ // UTF-8 encoded |partition_id|. If the prefix is a match, we can safely
+ // remove the prefix without splicing in the middle of a multi-byte codepoint.
+ // We can use the rest of the string as UTF-8 encoded one.
+ if (StartsWithASCII(partition_str, "persist:", true)) {
+ size_t index = partition_str.find(":");
+ CHECK(index != std::string::npos);
+ // It is safe to do index + 1, since we tested for the full prefix above.
+ *storage_partition_id = partition_str.substr(index + 1);
+
+ if (storage_partition_id->empty()) {
+ // TODO(lazyboy): Better way to deal with this error.
+ return;
+ }
+ *persist_storage = true;
+ } else {
+ *storage_partition_id = partition_str;
+ *persist_storage = false;
+ }
+
+ printf("Output: storage_partition_id: %s, persist_storage: %d\n",
+ storage_partition_id->c_str(), *persist_storage);
+}
+
+} // namespace
+
+
// A WebContents does not immediately have a RenderProcessHost. It acquires one
// on initial navigation. This observer exists until that initial navigation in
// order to grab the ID if tis RenderProcessHost so that it can register it as
@@ -95,9 +127,18 @@ int GuestViewManager::GetNextInstanceID() {
content::WebContents* GuestViewManager::CreateGuest(
content::SiteInstance* embedder_site_instance,
int instance_id,
- const std::string& storage_partition_id,
- bool persist_storage,
scoped_ptr<base::DictionaryValue> extra_params) {
+ std::string storage_partition_id;
+ bool persist_storage = false;
+ std::string storage_partition_string;
+ if (extra_params->GetString(guestview::kStoragePartitionId,
+ &storage_partition_string)) {
+ ParsePartitionParam(
+ storage_partition_string, &storage_partition_id, &persist_storage);
+ } else {
+ printf("Not found storagePartitionId key\n");
+ }
+
content::RenderProcessHost* embedder_process_host =
embedder_site_instance->GetProcess();
// Validate that the partition id coming from the renderer is valid UTF-8,

Powered by Google App Engine
This is Rietveld 408576698