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

Unified Diff: content/renderer/render_frame_impl.cc

Issue 2385773003: Add UMA to measure feasibility of making unique names immutable (Closed)
Patch Set: comments + uma xml Created 4 years, 2 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: content/renderer/render_frame_impl.cc
diff --git a/content/renderer/render_frame_impl.cc b/content/renderer/render_frame_impl.cc
index b15731cc3614963ced8c7dd7a64cbe1dd3390b5f..af5678d14392f354fc717d7d36ddc75bd10f4876 100644
--- a/content/renderer/render_frame_impl.cc
+++ b/content/renderer/render_frame_impl.cc
@@ -2959,6 +2959,9 @@ void RenderFrameImpl::didChangeName(const blink::WebString& name,
routing_id_, base::UTF16ToUTF8(base::StringPiece16(name)),
base::UTF16ToUTF8(base::StringPiece16(unique_name))));
}
+
+ if (!committed_first_load_)
+ name_changed_before_first_commit_ = true;
}
void RenderFrameImpl::didEnforceInsecureRequestPolicy(
@@ -3344,6 +3347,43 @@ void RenderFrameImpl::didCommitProvisionalLoad(
"id", routing_id_,
"url", GetLoadingUrl().possibly_invalid_spec());
DCHECK_EQ(frame_, frame);
+
+ // TODO(dcheng): Remove this UMA once we have enough measurements.
+ // Record the number of subframes where window.name changes between the
+ // creation of the frame and the first commit that records a history entry
+ // with a persisted unique name. We'd like to make unique name immutable to
+ // simplify code, but it's unclear if there are site that depend on the
+ // following pattern:
+ // 1. Create a new subframe.
+ // 2. Assign it a window.name.
+ // 3. Navigate it.
+ //
+ // If unique name are immutable, then it's possible that session history would
+ // become less reliable for subframes:
+ // * A subframe with no initial name will receive a generated name that
+ // depends on DOM insertion order instead of using a name baed on the
+ // window.name assigned in step 2.
+ // * A subframe may intentionally try to choose a non-conflicting
+ // window.name if it detects a conflict. Immutability would prevent this
+ // from having the desired effect.
+ //
+ // The logic for when to record the UMA is a bit subtle:
+ // * if |committed_first_load_| is false and |current_history_item_| is
+ // null, then this is being called to commit the initial empty document.
+ // Don't record the UMA yet. |current_history_item_| will be non-null in
+ // subsequent invocations of this callback.
+ // * if |committed_first_load_| is false and |current_history_item_| is
+ // *not* null, then the initial empty document has already committed.
+ // Record if window.name has changed.
+ if (!committed_first_load_ && !current_history_item_.isNull()) {
Charlie Reis 2016/10/04 18:15:44 One possible hiccup: I don't think we get a commit
+ if (!IsMainFrame()) {
+ UMA_HISTOGRAM_BOOLEAN(
+ "SessionRestore.SubFrameUniqueNameChangedBeforeFirstCommit",
+ name_changed_before_first_commit_);
+ }
+ committed_first_load_ = true;
+ }
+
DocumentState* document_state =
DocumentState::FromDataSource(frame->dataSource());
NavigationStateImpl* navigation_state =

Powered by Google App Engine
This is Rietveld 408576698