summaryrefslogtreecommitdiff
path: root/chromium/content/browser/frame_host/navigation_request.cc
diff options
context:
space:
mode:
Diffstat (limited to 'chromium/content/browser/frame_host/navigation_request.cc')
-rw-r--r--chromium/content/browser/frame_host/navigation_request.cc17
1 files changed, 14 insertions, 3 deletions
diff --git a/chromium/content/browser/frame_host/navigation_request.cc b/chromium/content/browser/frame_host/navigation_request.cc
index 66cbc43ab67..a9d1909d17f 100644
--- a/chromium/content/browser/frame_host/navigation_request.cc
+++ b/chromium/content/browser/frame_host/navigation_request.cc
@@ -1006,14 +1006,25 @@ void NavigationRequest::OnStartChecksComplete(
// Mark the fetch_start (Navigation Timing API).
request_params_.navigation_timing.fetch_start = base::TimeTicks::Now();
+ GURL base_url;
+#if defined(OS_ANDROID)
+ // On Android, a base URL can be set for the frame. If this the case, it is
+ // the URL to use for cookies.
+ NavigationEntry* last_committed_entry =
+ frame_tree_node_->navigator()->GetController()->GetLastCommittedEntry();
+ if (last_committed_entry)
+ base_url = last_committed_entry->GetBaseURLForDataURL();
+#endif
+ const GURL& top_document_url =
+ !base_url.is_empty()
+ ? base_url
+ : frame_tree_node_->frame_tree()->root()->current_url();
// TODO(mkwst): This is incorrect. It ought to use the definition from
// 'Document::firstPartyForCookies()' in Blink, which walks the ancestor tree
// and verifies that all origins are PSL-matches (and special-cases extension
// URLs).
const GURL& site_for_cookies =
- frame_tree_node_->IsMainFrame()
- ? common_params_.url
- : frame_tree_node_->frame_tree()->root()->current_url();
+ frame_tree_node_->IsMainFrame() ? common_params_.url : top_document_url;
bool parent_is_main_frame = !frame_tree_node_->parent()
? false
: frame_tree_node_->parent()->IsMainFrame();