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

Unified Diff: visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs

Issue 10836143: Refactored the VS add-in (Closed) Base URL: https://nativeclient-sdk.googlecode.com/svn/trunk/src
Patch Set: Created 8 years, 4 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 side-by-side diff with in-line comments
Download patch
Index: visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs
diff --git a/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs b/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs
index 476bd8b515d4cdd1a419b0cde94348071cdde345..1bc73c8086451d37069b1e60f856a5cb32ed4801 100644
--- a/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs
+++ b/visual_studio/NativeClientVSAddIn/NativeClientVSAddIn/Connect.cs
@@ -11,12 +11,17 @@ namespace NativeClientVSAddIn
using Extensibility;
using Microsoft.VisualStudio;
using Microsoft.VisualStudio.VCProjectEngine;
-
+
/// <summary>The object for implementing an Add-in.</summary>
/// <seealso class='IDTExtensibility2' />
public class Connect : IDTExtensibility2
{
/// <summary>
+ /// The main Visual Studio interface.
+ /// </summary>
+ private DTE2 dte_;
+
+ /// <summary>
/// Receives events related to starting/stopping debugging.
/// </summary>
private DebuggerEvents debuggerEvents_;
@@ -27,14 +32,20 @@ namespace NativeClientVSAddIn
private CommandEvents commandEvents_;
/// <summary>
- /// The main Visual Studio interface.
+ /// Holds methods related to debugging.
/// </summary>
- private DTE2 dte_;
+ private PluginDebuggerBase debugger_;
+
+ /// <summary>
+ /// The web server launched during debugging.
+ /// </summary>
+ private WebServer webServer_;
/// <summary>
- /// Holds methods related to running the plug-in and debugging.
+ /// Visual Studio output window pane that captures output from the web server, and displays
+ /// other web-server related information.
/// </summary>
- private PluginDebuggerHelper debuggerHelper_;
+ private OutputWindowPane webServerOutputPane_;
/// <summary>
/// Implements the OnConnection method of the IDTExtensibility2 interface.
@@ -55,7 +66,6 @@ namespace NativeClientVSAddIn
ref Array custom)
{
dte_ = (DTE2)application;
- debuggerHelper_ = new PluginDebuggerHelper(dte_);
debuggerEvents_ = dte_.Events.DebuggerEvents;
debuggerEvents_.OnEnterDesignMode += DebuggerOnEnterDesignMode;
@@ -63,6 +73,18 @@ namespace NativeClientVSAddIn
commandEvents_ = dte_.Events.CommandEvents;
commandEvents_.AfterExecute += CommandEventsAfterExecute;
+
+ try
+ {
+ webServerOutputPane_ = dte_.ToolWindows.OutputWindow.OutputWindowPanes.Item(
+ Strings.WebServerOutputWindowTitle);
+ }
+ catch (ArgumentException)
+ {
+ // This exception is expected if the window pane hasn't been created yet.
+ webServerOutputPane_ = dte_.ToolWindows.OutputWindow.OutputWindowPanes.Add(
+ Strings.WebServerOutputWindowTitle);
+ }
}
/// <summary>
@@ -149,13 +171,19 @@ namespace NativeClientVSAddIn
var configs = Utility.GetPlatformVCConfigurations(dte_, Strings.PepperPlatformName);
configs.AddRange(Utility.GetPlatformVCConfigurations(dte_, Strings.NaClPlatformName));
+ var properties = new PropertyManager();
foreach (VCConfiguration config in configs)
{
- IVCRulePropertyStorage general = config.Rules.Item("ConfigurationGeneral");
- string projectVersionSetting = general.GetEvaluatedPropertyValue("NaClAddInVersion");
- if (string.IsNullOrEmpty(projectVersionSetting))
+ properties.SetTarget(config);
+ if (string.IsNullOrEmpty(properties.NaClAddInVersion))
{
- general.SetPropertyValue("NaClAddInVersion", naclAddInVersion);
+ // Set the NaCl add-in version so that it is stored in the project file.
+ properties.SetProperty("ConfigurationGeneral", "NaClAddInVersion", naclAddInVersion);
+
+ // Expand the CHROME_PATH variable to its full path.
+ string expandedChrome = properties.GetProperty(
+ "WindowsLocalDebugger", "LocalDebuggerCommand");
+ properties.SetProperty("WindowsLocalDebugger", "LocalDebuggerCommand", expandedChrome);
// Work around for issue 140162. Forces some properties to save to the project file.
PerformPropertyFixes(config);
@@ -171,9 +199,6 @@ namespace NativeClientVSAddIn
private void PerformPropertyFixes(VCConfiguration config)
{
IVCRulePropertyStorage debugger = config.Rules.Item("WindowsLocalDebugger");
- string evaluatedCommand = debugger.GetEvaluatedPropertyValue("LocalDebuggerCommand");
- debugger.SetPropertyValue("LocalDebuggerCommand", evaluatedCommand);
-
string arguments = debugger.GetUnevaluatedPropertyValue("LocalDebuggerCommandArguments");
debugger.SetPropertyValue("LocalDebuggerCommandArguments", arguments);
}
@@ -206,25 +231,47 @@ namespace NativeClientVSAddIn
/// <summary>
/// Called when Visual Studio ends a debugging session.
+ /// Shuts down the web server and debugger.
/// </summary>
/// <param name="reason">The parameter is not used.</param>
private void DebuggerOnEnterDesignMode(dbgEventReason reason)
{
- debuggerHelper_.StopDebugging();
+ if (debugger_ != null)
+ {
+ debugger_.Dispose();
+ debugger_ = null;
+ }
+
+ if (webServer_ != null)
+ {
+ webServer_.Dispose();
+ webServer_ = null;
+ }
}
/// <summary>
/// Called when Visual Studio starts a debugging session.
+ /// Here we kick off the debugger and web server if appropriate.
/// </summary>
/// <param name="reason">Indicates how we are entering run mode (breakpoint or launch).</param>
private void DebuggerOnEnterRunMode(dbgEventReason reason)
{
// If we are starting debugging (not re-entering from a breakpoint)
// then load project settings and start the debugger-helper.
- if (reason == dbgEventReason.dbgEventReasonLaunchProgram &&
- debuggerHelper_.LoadProjectSettings())
+ if (reason == dbgEventReason.dbgEventReasonLaunchProgram)
{
- debuggerHelper_.StartDebugging();
+ PropertyManager properties = new PropertyManager();
+ properties.SetTargetToActive(dte_);
+ if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.NaCl)
+ {
+ debugger_ = new PluginDebuggerGDB(dte_, properties);
+ webServer_ = new WebServer(webServerOutputPane_, properties);
+ }
+ else if (properties.ProjectPlatform == PropertyManager.ProjectPlatformType.Pepper)
+ {
+ debugger_ = new PluginDebuggerVS(dte_, properties);
+ webServer_ = new WebServer(webServerOutputPane_, properties);
+ }
}
}
}

Powered by Google App Engine
This is Rietveld 408576698