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

Unified Diff: chrome/browser/guest_view/web_view/web_view_guest.cc

Issue 299753011: Move allocate instance id to chrome/. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: HasPermission function moved Created 6 years, 6 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/browser/guest_view/web_view/web_view_guest.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: chrome/browser/guest_view/web_view/web_view_guest.cc
diff --git a/chrome/browser/guest_view/web_view/web_view_guest.cc b/chrome/browser/guest_view/web_view/web_view_guest.cc
index 01f46fe4400f3b8b971b1ce1de42a08f9fc7a500..1028b74b0164cc637b52b02ec07b7a3dc8942f99 100644
--- a/chrome/browser/guest_view/web_view/web_view_guest.cc
+++ b/chrome/browser/guest_view/web_view/web_view_guest.cc
@@ -142,6 +142,12 @@ static std::string PermissionTypeToString(WebViewPermissionType type) {
}
}
+std::string GetStoragePartitionIdFromSiteURL(const GURL& site_url) {
+ const std::string& partition_id = site_url.query();
+ bool persist_storage = site_url.path().find("persist") != std::string::npos;
+ return (persist_storage ? webview::kPersistPrefix : "") + partition_id;
+}
+
void RemoveWebViewEventListenersOnIOThread(
void* profile,
const std::string& extension_id,
@@ -246,6 +252,37 @@ int WebViewGuest::GetViewInstanceId(WebContents* contents) {
}
// static
+void WebViewGuest::ParsePartitionParam(
+ const base::DictionaryValue* extra_params,
+ std::string* storage_partition_id,
+ bool* persist_storage) {
+ std::string partition_str;
+ if (!extra_params->GetString(webview::kStoragePartitionId, &partition_str)) {
+ return;
+ }
+
+ // 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;
+ }
+}
+
+// static
void WebViewGuest::RecordUserInitiatedUMA(const PermissionResponseInfo& info,
bool allow) {
if (allow) {
@@ -424,7 +461,11 @@ void WebViewGuest::CloseContents(WebContents* source) {
DispatchEvent(new GuestViewBase::Event(webview::kEventClose, args.Pass()));
}
-void WebViewGuest::DidAttach() {
+void WebViewGuest::DidAttach(const base::DictionaryValue& extra_params) {
+ std::string src;
+ if (extra_params.GetString("src", &src) && !src.empty())
+ NavigateGuest(src);
+
if (GetOpener()) {
// We need to do a navigation here if the target URL has changed between
// the time the WebContents was created and the time it was attached.
@@ -541,16 +582,14 @@ WebViewGuest* WebViewGuest::CreateNewGuestWindow(
// We pull the partition information from the site's URL, which is of the
// form guest://site/{persist}?{partition_name}.
const GURL& site_url = guest_web_contents()->GetSiteInstance()->GetSiteURL();
-
scoped_ptr<base::DictionaryValue> create_params(extra_params()->DeepCopy());
- const std::string& storage_partition_id = site_url.query();
- bool persist_storage =
- site_url.path().find("persist") != std::string::npos;
+ const std::string storage_partition_id =
+ GetStoragePartitionIdFromSiteURL(site_url);
+ create_params->SetString(webview::kStoragePartitionId, storage_partition_id);
+
WebContents* new_guest_web_contents =
guest_manager->CreateGuest(guest_web_contents()->GetSiteInstance(),
instance_id,
- storage_partition_id,
- persist_storage,
create_params.Pass());
WebViewGuest* new_guest =
WebViewGuest::FromWebContents(new_guest_web_contents);
@@ -1382,6 +1421,10 @@ void WebViewGuest::RequestNewWindowPermission(
return;
const NewWindowInfo& new_window_info = it->second;
+ // Retrieve the opener partition info if we have it.
+ const GURL& site_url = new_contents->GetSiteInstance()->GetSiteURL();
+ std::string storage_partition_id = GetStoragePartitionIdFromSiteURL(site_url);
+
base::DictionaryValue request_info;
request_info.Set(webview::kInitialHeight,
base::Value::CreateIntegerValue(initial_bounds.height()));
@@ -1393,6 +1436,10 @@ void WebViewGuest::RequestNewWindowPermission(
base::Value::CreateStringValue(new_window_info.name));
request_info.Set(webview::kWindowID,
base::Value::CreateIntegerValue(guest->guest_instance_id()));
+ // We pass in partition info so that window-s created through newwindow
+ // API can use it to set their partition attribute.
+ request_info.Set(webview::kStoragePartitionId,
+ base::Value::CreateStringValue(storage_partition_id));
request_info.Set(webview::kWindowOpenDisposition,
base::Value::CreateStringValue(
WindowOpenDispositionToString(disposition)));
« no previous file with comments | « chrome/browser/guest_view/web_view/web_view_guest.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698