Index: visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/PluginDebuggerVS.cs |
diff --git a/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/PluginDebuggerVS.cs b/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/PluginDebuggerVS.cs |
new file mode 100644 |
index 0000000000000000000000000000000000000000..2ad73e888ab1d6fd5eb2b39499d4b34f75cb7500 |
--- /dev/null |
+++ b/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/PluginDebuggerVS.cs |
@@ -0,0 +1,66 @@ |
+// Copyright (c) 2012 The Chromium Authors. All rights reserved. |
+// Use of this source code is governed by a BSD-style license that can be |
+// found in the LICENSE file. |
+ |
+namespace NativeClientVSAddIn |
+{ |
+ using System; |
+ |
+ using EnvDTE80; |
+ |
+ /// <summary> |
+ /// This class handles the details of finding a pepper plugin and attaching to it. |
+ /// </summary> |
+ public class PluginDebuggerVS : PluginDebuggerBase |
+ { |
+ /// <summary> |
+ /// Path to the actual plug-in assembly. |
+ /// </summary> |
+ private string pluginAssembly_; |
+ |
+ /// <summary> |
+ /// Constructs the PluginDebuggerHelper. |
+ /// </summary> |
+ /// <param name="dte">Automation object from Visual Studio.</param> |
+ /// <param name="properties">PropertyManager pointing to a valid project/platform.</param> |
+ public PluginDebuggerVS(DTE2 dte, PropertyManager properties) |
+ : base(dte, properties) |
+ { |
+ pluginAssembly_ = properties.PluginAssembly; |
+ PluginFoundEvent += new EventHandler<PluginFoundEventArgs>(Attach); |
+ } |
+ |
+ /// <summary> |
+ /// Called to check if a process is a valid pepper plugin to attach to. |
+ /// </summary> |
+ /// <param name="proc">Contains information about the process in question.</param> |
+ /// <param name="mainChromeFlags">Flags on the main Chrome process.</param> |
+ /// <returns>True if we should attach to the process.</returns> |
+ protected override bool IsPluginProcess(ProcessInfo proc, string mainChromeFlags) |
+ { |
+ StringComparison ignoreCase = StringComparison.InvariantCultureIgnoreCase; |
+ string identifierFlagTarget = |
+ string.Format(Strings.PepperProcessPluginFlagFormat, pluginAssembly_); |
+ return proc.Name.Equals(Strings.ChromeProcessName, ignoreCase) && |
+ proc.CommandLine.Contains(Strings.ChromeRendererFlag, ignoreCase) && |
+ proc.CommandLine.Contains(identifierFlagTarget, ignoreCase); |
+ } |
+ |
+ /// <summary> |
+ /// Attaches the Visual Studio debugger to the given process ID. |
+ /// </summary> |
+ /// <param name="src">The parameter is not used.</param> |
+ /// <param name="args">Contains the process ID to attach to.</param> |
+ private void Attach(object src, PluginFoundEventArgs args) |
+ { |
+ foreach (EnvDTE.Process proc in Dte.Debugger.LocalProcesses) |
+ { |
+ if (proc.ProcessID == args.ProcessID) |
+ { |
+ proc.Attach(); |
+ break; |
+ } |
+ } |
+ } |
+ } |
+} |