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

Side by Side Diff: Source/devtools/front_end/sdk/StylesSourceMapping.js

Issue 319143002: DevTools: introduce WebInspector.Throttler (Closed) Base URL: svn://svn.chromium.org/blink/trunk
Patch Set: address @vsevik's nit Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 /* 1 /*
2 * Copyright (C) 2012 Google Inc. All rights reserved. 2 * Copyright (C) 2012 Google Inc. All rights reserved.
3 * 3 *
4 * Redistribution and use in source and binary forms, with or without 4 * Redistribution and use in source and binary forms, with or without
5 * modification, are permitted provided that the following conditions are 5 * modification, are permitted provided that the following conditions are
6 * met: 6 * met:
7 * 7 *
8 * * Redistributions of source code must retain the above copyright 8 * * Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer. 9 * notice, this list of conditions and the following disclaimer.
10 * * Redistributions in binary form must reproduce the above 10 * * Redistributions in binary form must reproduce the above
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
316 * @constructor 316 * @constructor
317 * @param {!WebInspector.UISourceCode} uiSourceCode 317 * @param {!WebInspector.UISourceCode} uiSourceCode
318 * @param {!WebInspector.StylesSourceMapping} mapping 318 * @param {!WebInspector.StylesSourceMapping} mapping
319 */ 319 */
320 WebInspector.StyleFile = function(uiSourceCode, mapping) 320 WebInspector.StyleFile = function(uiSourceCode, mapping)
321 { 321 {
322 this._uiSourceCode = uiSourceCode; 322 this._uiSourceCode = uiSourceCode;
323 this._mapping = mapping; 323 this._mapping = mapping;
324 this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.Working CopyChanged, this._workingCopyChanged, this); 324 this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.Working CopyChanged, this._workingCopyChanged, this);
325 this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.Working CopyCommitted, this._workingCopyCommitted, this); 325 this._uiSourceCode.addEventListener(WebInspector.UISourceCode.Events.Working CopyCommitted, this._workingCopyCommitted, this);
326 this._commitThrottler = new WebInspector.Throttler(WebInspector.StyleFile.up dateTimeout);
326 } 327 }
327 328
328 WebInspector.StyleFile.updateTimeout = 200; 329 WebInspector.StyleFile.updateTimeout = 200;
329 330
330 /**
331 * @enum {string}
332 */
333 WebInspector.StyleFile.PendingChangeType = {
334 Major: "Major",
335 Minor: "Minor"
336 }
337
338 WebInspector.StyleFile.prototype = { 331 WebInspector.StyleFile.prototype = {
339 /** 332 /**
340 * @param {!WebInspector.Event} event 333 * @param {!WebInspector.Event} event
341 */ 334 */
342 _workingCopyCommitted: function(event) 335 _workingCopyCommitted: function(event)
343 { 336 {
344 if (this._isAddingRevision) 337 if (this._isAddingRevision)
345 return; 338 return;
346 339
347 this._pendingChangeType = WebInspector.StyleFile.PendingChangeType.Major ; 340 this._isMajorChangePending = true;
348 this._maybeProcessChange(); 341 this._commitThrottler.schedule(this._commitIncrementalEdit.bind(this), t rue);
349 }, 342 },
350 343
351 /** 344 /**
352 * @param {!WebInspector.Event} event 345 * @param {!WebInspector.Event} event
353 */ 346 */
354 _workingCopyChanged: function(event) 347 _workingCopyChanged: function(event)
355 { 348 {
356 if (this._isAddingRevision) 349 if (this._isAddingRevision)
357 return; 350 return;
358 351
359 if (this._pendingChangeType === WebInspector.StyleFile.PendingChangeType .Major) 352 this._commitThrottler.schedule(this._commitIncrementalEdit.bind(this), f alse);
360 return;
361 this._pendingChangeType = WebInspector.StyleFile.PendingChangeType.Minor ;
362 this._maybeProcessChange();
363 },
364
365 _maybeProcessChange: function()
366 {
367 if (this._isSettingContent)
368 return;
369 if (!this._pendingChangeType)
370 return;
371
372 if (this._pendingChangeType === WebInspector.StyleFile.PendingChangeType .Major) {
373 this._clearIncrementalUpdateTimer();
374 delete this._pendingChangeType;
375 this._commitIncrementalEdit(true);
376 return;
377 }
378
379 if (this._incrementalUpdateTimer)
380 return;
381 this._incrementalUpdateTimer = setTimeout(this._commitIncrementalEdit.bi nd(this, false), WebInspector.StyleFile.updateTimeout);
382 }, 353 },
383 354
384 /** 355 /**
385 * @param {boolean} majorChange 356 * @param {!WebInspector.Throttler.FinishCallback} finishCallback
386 */ 357 */
387 _commitIncrementalEdit: function(majorChange) 358 _commitIncrementalEdit: function(finishCallback)
388 { 359 {
389 this._clearIncrementalUpdateTimer(); 360 this._mapping._setStyleContent(this._uiSourceCode, this._uiSourceCode.wo rkingCopy(), this._isMajorChangePending, this._styleContentSet.bind(this, finish Callback));
390 delete this._pendingChangeType; 361 this._isMajorChangePending = false;
391 this._isSettingContent = true;
392 this._mapping._setStyleContent(this._uiSourceCode, this._uiSourceCode.wo rkingCopy(), majorChange, this._styleContentSet.bind(this));
393 }, 362 },
394 363
395 /** 364 /**
365 * @param {!WebInspector.Throttler.FinishCallback} finishCallback
396 * @param {?string} error 366 * @param {?string} error
397 */ 367 */
398 _styleContentSet: function(error) 368 _styleContentSet: function(finishCallback, error)
399 { 369 {
400 if (error) 370 if (error)
401 this._mapping._cssModel.target().consoleModel.showErrorMessage(error ); 371 this._mapping._cssModel.target().consoleModel.showErrorMessage(error );
402 delete this._isSettingContent; 372 finishCallback();
403 this._maybeProcessChange();
404 },
405
406 _clearIncrementalUpdateTimer: function()
407 {
408 if (!this._incrementalUpdateTimer)
409 return;
410 clearTimeout(this._incrementalUpdateTimer);
411 delete this._incrementalUpdateTimer;
412 }, 373 },
413 374
414 /** 375 /**
415 * @param {string} content 376 * @param {string} content
416 */ 377 */
417 addRevision: function(content) 378 addRevision: function(content)
418 { 379 {
419 this._isAddingRevision = true; 380 this._isAddingRevision = true;
420 this._uiSourceCode.addRevision(content); 381 this._uiSourceCode.addRevision(content);
421 delete this._isAddingRevision; 382 delete this._isAddingRevision;
422 }, 383 },
423 384
424 dispose: function() 385 dispose: function()
425 { 386 {
426 this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events. WorkingCopyCommitted, this._workingCopyCommitted, this); 387 this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events. WorkingCopyCommitted, this._workingCopyCommitted, this);
427 this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events. WorkingCopyChanged, this._workingCopyChanged, this); 388 this._uiSourceCode.removeEventListener(WebInspector.UISourceCode.Events. WorkingCopyChanged, this._workingCopyChanged, this);
428 } 389 }
429 } 390 }
OLDNEW
« no previous file with comments | « Source/devtools/front_end/sdk/OverridesSupport.js ('k') | Source/devtools/scripts/frontend_modules.json » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698