org.chromium.sdk/src/org/chromium/sdk/internal/tools/v8/BreakpointImpl.java
changeset 2 e4420d2515f1
child 355 8726e95bcbba
equal deleted inserted replaced
1:ef76fc2ac88c 2:e4420d2515f1
       
     1 // Copyright (c) 2009 The Chromium Authors. All rights reserved.
       
     2 // Use of this source code is governed by a BSD-style license that can be
       
     3 // found in the LICENSE file.
       
     4 
       
     5 package org.chromium.sdk.internal.tools.v8;
       
     6 
       
     7 import org.chromium.sdk.Breakpoint;
       
     8 import org.chromium.sdk.BrowserTab;
       
     9 
       
    10 /**
       
    11  * A generic implementation of the Breakpoint interface.
       
    12  */
       
    13 public class BreakpointImpl implements Breakpoint {
       
    14 
       
    15   /**
       
    16    * The breakpoint type.
       
    17    */
       
    18   private final Type type;
       
    19 
       
    20   /**
       
    21    * The breakpoint id as reported by the JavaScript VM.
       
    22    */
       
    23   private long id;
       
    24 
       
    25   /**
       
    26    * Whether the breakpoint is enabled.
       
    27    */
       
    28   private boolean isEnabled;
       
    29 
       
    30   /**
       
    31    * The number of times the breakpoint should be ignored
       
    32    * by the JavaScript VM until it fires.
       
    33    */
       
    34   private int ignoreCount;
       
    35 
       
    36   /**
       
    37    * The breakpoint condition (plain JavaScript) that should be {@code true}
       
    38    * for the breakpoint to fire.
       
    39    */
       
    40   private String condition;
       
    41 
       
    42   /**
       
    43    * The breakpoint manager that manages this breakpoint.
       
    44    */
       
    45   private final BreakpointManager breakpointManager;
       
    46 
       
    47   /**
       
    48    * Whether the breakpoint data have changed with respect
       
    49    * to the JavaScript VM data.
       
    50    */
       
    51   private volatile boolean isDirty = false;
       
    52 
       
    53   public BreakpointImpl(Type type, long id, boolean enabled, int ignoreCount, String condition,
       
    54       BreakpointManager breakpointManager) {
       
    55     this.type = type;
       
    56     this.id = id;
       
    57     this.isEnabled = enabled;
       
    58     this.ignoreCount = ignoreCount;
       
    59     this.condition = condition;
       
    60     this.breakpointManager = breakpointManager;
       
    61   }
       
    62 
       
    63   public boolean isEnabled() {
       
    64     return isEnabled;
       
    65   }
       
    66 
       
    67   public Type getType() {
       
    68     return type;
       
    69   }
       
    70 
       
    71   public long getId() {
       
    72     return id;
       
    73   }
       
    74 
       
    75   public int getIgnoreCount() {
       
    76     return ignoreCount;
       
    77   }
       
    78 
       
    79   public String getCondition() {
       
    80     return condition;
       
    81   }
       
    82 
       
    83   public void setEnabled(boolean enabled) {
       
    84     if (this.isEnabled != enabled) {
       
    85       setDirty(true);
       
    86     }
       
    87     this.isEnabled = enabled;
       
    88   }
       
    89 
       
    90   public void setIgnoreCount(int ignoreCount) {
       
    91     if (this.ignoreCount != ignoreCount) {
       
    92       setDirty(true);
       
    93     }
       
    94     this.ignoreCount = ignoreCount;
       
    95   }
       
    96 
       
    97 
       
    98   public void setCondition(String condition) {
       
    99     if (!eq(this.condition, condition)) {
       
   100       setDirty(true);
       
   101     }
       
   102     this.condition = condition;
       
   103   }
       
   104 
       
   105   private boolean eq(Object left, Object right) {
       
   106     return left == right || (left != null && left.equals(right));
       
   107   }
       
   108 
       
   109   public void clear(final BrowserTab.BreakpointCallback callback) {
       
   110     breakpointManager.clearBreakpoint(this, callback);
       
   111     // The order must be preserved, otherwise the breakpointProcessor will not be able
       
   112     // to identify the original breakpoint ID.
       
   113     this.id = INVALID_ID;
       
   114   }
       
   115 
       
   116   public void flush(final BrowserTab.BreakpointCallback callback) {
       
   117     if (!isDirty()) {
       
   118       if (callback != null) {
       
   119         callback.success(this);
       
   120       }
       
   121       return;
       
   122     }
       
   123     breakpointManager.changeBreakpoint(this, callback);
       
   124     setDirty(false);
       
   125   }
       
   126 
       
   127   private void setDirty(boolean isDirty) {
       
   128     this.isDirty = isDirty;
       
   129   }
       
   130 
       
   131   private boolean isDirty() {
       
   132     return isDirty;
       
   133   }
       
   134 
       
   135 }