diff options
Diffstat (limited to 'chromium/content/browser/frame_host/navigation_request.cc')
-rw-r--r-- | chromium/content/browser/frame_host/navigation_request.cc | 17 |
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(); |