| Index: third_party/WebKit/Source/core/timing/Performance.cpp
 | 
| diff --git a/third_party/WebKit/Source/core/timing/Performance.cpp b/third_party/WebKit/Source/core/timing/Performance.cpp
 | 
| index e8402d527b83e817adafcd38c2ec1c91a1b20a52..da6233deabda0ef21a4bcfdd3698f09c0923d35d 100644
 | 
| --- a/third_party/WebKit/Source/core/timing/Performance.cpp
 | 
| +++ b/third_party/WebKit/Source/core/timing/Performance.cpp
 | 
| @@ -34,8 +34,11 @@
 | 
|  #include "bindings/core/v8/ScriptValue.h"
 | 
|  #include "bindings/core/v8/V8ObjectBuilder.h"
 | 
|  #include "core/dom/Document.h"
 | 
| +#include "core/dom/QualifiedName.h"
 | 
| +#include "core/frame/DOMWindow.h"
 | 
|  #include "core/frame/LocalFrame.h"
 | 
|  #include "core/frame/UseCounter.h"
 | 
| +#include "core/html/HTMLFrameOwnerElement.h"
 | 
|  #include "core/loader/DocumentLoader.h"
 | 
|  #include "core/origin_trials/OriginTrials.h"
 | 
|  #include "core/timing/PerformanceTiming.h"
 | 
| @@ -51,6 +54,22 @@ static const char kCrossOriginAttribution[] = "cross-origin-unreachable";
 | 
|  
 | 
|  namespace blink {
 | 
|  
 | 
| +namespace {
 | 
| +
 | 
| +String getFrameAttribute(HTMLFrameOwnerElement* frameOwner,
 | 
| +                         const QualifiedName& attrName,
 | 
| +                         bool truncate) {
 | 
| +  String attrValue;
 | 
| +  if (frameOwner->hasAttribute(attrName)) {
 | 
| +    attrValue = frameOwner->getAttribute(attrName);
 | 
| +    if (truncate && attrValue.length() > 100)
 | 
| +      attrValue = attrValue.substring(0, 100);  // Truncate to 100 chars
 | 
| +  }
 | 
| +  return attrValue;
 | 
| +}
 | 
| +
 | 
| +}  // namespace
 | 
| +
 | 
|  static double toTimeOrigin(LocalFrame* frame) {
 | 
|    if (!frame)
 | 
|      return 0.0;
 | 
| @@ -195,7 +214,18 @@ void Performance::reportLongTask(
 | 
|      const HeapHashSet<Member<Frame>>& contextFrames) {
 | 
|    std::pair<String, DOMWindow*> attribution =
 | 
|        Performance::sanitizedAttribution(contextFrames, frame());
 | 
| -  addLongTaskTiming(startTime, endTime, attribution.first, attribution.second);
 | 
| +  DOMWindow* culpritDomWindow = attribution.second;
 | 
| +  if (!culpritDomWindow || !culpritDomWindow->document() ||
 | 
| +      !culpritDomWindow->document()->localOwner()) {
 | 
| +    addLongTaskTiming(startTime, endTime, attribution.first, "", "", "");
 | 
| +  } else {
 | 
| +    HTMLFrameOwnerElement* frameOwner =
 | 
| +        culpritDomWindow->document()->localOwner();
 | 
| +    addLongTaskTiming(startTime, endTime, attribution.first,
 | 
| +                      getFrameAttribute(frameOwner, HTMLNames::srcAttr, false),
 | 
| +                      getFrameAttribute(frameOwner, HTMLNames::idAttr, false),
 | 
| +                      getFrameAttribute(frameOwner, HTMLNames::nameAttr, true));
 | 
| +  }
 | 
|  }
 | 
|  
 | 
|  }  // namespace blink
 | 
| 
 |