Skip to content

Commit

Permalink
Double-clicking recordings panel items will now switch which recording
Browse files Browse the repository at this point in the history
is loaded.

Closes #243.
  • Loading branch information
Brian J. Burg committed Apr 5, 2013
1 parent cebab24 commit 30f5e90
Show file tree
Hide file tree
Showing 4 changed files with 62 additions and 10 deletions.
3 changes: 0 additions & 3 deletions Source/WebCore/inspector/InspectorReplayAgent.cpp
Expand Up @@ -548,9 +548,6 @@ void InspectorReplayAgent::loadRecording(ErrorString* errorString, int uid, bool
return;
}
*wasAllowed = m_inspectedPage->replayController()->loadRecording(it->value);

if (wasAllowed && m_frontend)
m_frontend->recordingLoaded(uid);
}

void InspectorReplayAgent::unloadRecording(ErrorString* errorString, bool* wasAllowed)
Expand Down
11 changes: 11 additions & 0 deletions Source/WebCore/inspector/front-end/RecordingsPanel.js
Expand Up @@ -325,6 +325,17 @@ WebInspector.RecordingSidebarTreeElement.prototype = {
return true;
},

ondblclick: function()
{
var model = WebInspector.replayModel;
if (!model.canReplay)
return;
if (model.loadedRecording === this.recording)
return;

model.scheduler.executeImmediately(model.switchRecordingTask(this.recording));
},

/**
* @param {!Event} event
*/
Expand Down
56 changes: 50 additions & 6 deletions Source/WebCore/inspector/front-end/ReplayModel.js
Expand Up @@ -476,6 +476,52 @@ WebInspector.ReplayModel.prototype = {
return task;
},

unloadRecordingTask: function()
{
var model = this;
return new WebInspector.ReplayTask("UnloadRecording")
.chain("stopPlaybackIfNeeded", function(cb) {
if (model.isReplaying)
model.stopPlaybackTask(true).run(cb);
else
cb();
})
.chain("unloadRecordingIfNeeded", function(cb) {
if (!model.canReplay)
return cb();

model.onceEventListener(WebInspector.ReplayModel.Events.RecordingUnloaded, cb);
model._unloadRecording();
});
},

loadRecordingTask: function(recording)
{
var model = this;
return new WebInspector.ReplayTask("LoadRecording")
.chain("requestRecordingLoad", function(cb) {
if (model.canReplay)
return cb();

model.onceEventListener(WebInspector.ReplayModel.Events.RecordingLoaded, cb);
model._loadRecording(recording);
});
},

switchRecordingTask: function(recording)
{
var model = this;
return new WebInspector.ReplayTask("SwitchRecording")
.chain("unloadRecording", function(cb) {
var subtask = model.unloadRecordingTask();
subtask.run(cb);
})
.chain("loadRecording", function(cb) {
var subtask = model.loadRecordingTask(recording);
subtask.run(cb);
});
},

// Public query API
get createdRecording()
{
Expand Down Expand Up @@ -563,17 +609,15 @@ WebInspector.ReplayModel.prototype = {
_unloadRecording: function()
{
console.assert(this.loadedRecording, "Can't unload recording because none is loaded");
ReplayAgent.unloadRecording(function(error, wasAllowed) {
this._canReplay = !wasAllowed;
});
// TODO: receiving !wasAllowed should trigger task error.
ReplayAgent.unloadRecording();
},

_loadRecording: function(recording)
{
console.assert(!this._activeRecording, "Can't load recording because one is already loaded");
ReplayAgent.loadRecording(recording.uid, function(error, wasAllowed) {
this._canReplay = !!wasAllowed;
});
// TODO: receiving !wasAllowed should trigger task error.
ReplayAgent.loadRecording(recording.uid);
},

// Callbacks from the backend message dispatcher (ReplayDispatcher below)
Expand Down
2 changes: 1 addition & 1 deletion Source/WebCore/replay/ReplayAgentStateMachine.cpp
Expand Up @@ -130,7 +130,7 @@ void ReplayAgentStateMachine::advanceTo(State newState)
break;

case RecordingUnloaded: // can always get to this state; not idempotent
if (!inState(RecordingLoaded))
if (!inState(RecordingUnloaded))
goto commit_transition;

break;
Expand Down

0 comments on commit 30f5e90

Please sign in to comment.