Skip to content

Commit 191b4f0

Browse files
author
p01
committed
Fix for DFL-3342, redirected top level resource (of a frame) not supported
1 parent 08944ff commit 191b4f0

File tree

1 file changed

+26
-8
lines changed

1 file changed

+26
-8
lines changed

src/resource-manager/resource_service.js

Lines changed: 26 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -390,15 +390,17 @@ cls.ResourceContext = function(data)
390390

391391
this.update = function(eventname, event)
392392
{
393+
var frame;
393394
if (eventname == "abouttoloaddocument")
394395
{
395-
var frame = new cls.ResourceFrame(event);
396+
frame = new cls.ResourceFrame(event);
396397
this.frames[ frame.id ] = frame;
397398
return;
398399
}
399400

401+
400402
var res = this.get_resource(event.resourceID);
401-
if (eventname == "urlload" && !res && this.frames[event.frameID])
403+
if (eventname == "urlload" && !res)
402404
{
403405
res = new cls.Resource(event.resourceID);
404406
res.frameID = event.frameID;
@@ -409,14 +411,20 @@ cls.ResourceContext = function(data)
409411
{
410412
res.update(eventname, event);
411413

412-
var frame = this.frames[res.frameID];
414+
frame = this.frames[res.frameID];
413415
if (eventname == "urlload")
414416
{
415417
if (res.id == frame.resourceID)
416418
{
417419
frame.resource = res;
418-
if (frame.parentFrameID)
419-
frame.sameOrigin = cls.ResourceUtil.sameOrigin(this.frames[frame.parentFrameID].resource, frame.resource);
420+
if (frame.parentFrameID )
421+
{
422+
var parentFrame = this.frames[frame.parentFrameID];
423+
if (parentFrame && parentFrame.resource)
424+
frame.sameOrigin = cls.ResourceUtil.sameOrigin(parentFrame.resource, frame.resource);
425+
else
426+
frame.sameOrigin = false;
427+
}
420428
}
421429
}
422430

@@ -437,15 +445,25 @@ cls.ResourceContext = function(data)
437445
else
438446
{
439447
opera.postError(ui_strings.S_DRAGONFLY_INFO_MESSAGE +
440-
"Unknown frameID for the resource "+ res.id);
448+
'Invalidating the resource '+ res.id +': '+ (frame?'Unkown top level resource '+frame.resourceId +' for the frame '+frame.id:'Unknown frameID '+ res.frameID));
441449
res.invalid = true;
442450
}
443451
}
444452

453+
if (eventname == "urlredirect")
454+
{
455+
// Adjust the frame if its top resource is redirected
456+
if (frame && frame.resourceID == res.id)
457+
{
458+
frame.resourceID = event.toResourceID;
459+
delete frame.resource;
460+
}
461+
}
462+
445463
if (res.invalid)
446464
{
447465
// delete the frame and all its resources if the top resource of a frame is invalid
448-
if (frame && frame.resource.id==res.id)
466+
if (frame && frame.resource && frame.resource.id==res.id)
449467
{
450468
delete this.frames[frame.id];
451469
for(var rid in this.resourcesDict)
@@ -549,7 +567,7 @@ cls.ResourcePrototype = function()
549567
// If it's one of these, it's not a real resource.
550568
if ([200, 206, 304].indexOf(eventdata.responseCode) == -1)
551569
{
552-
this.invalid = true;
570+
// this.invalid = true;
553571
}
554572
}
555573
else if (eventname == "urlredirect")

0 commit comments

Comments
 (0)