summaryrefslogtreecommitdiffstats
path: root/extensions/browser/file_highlighter.h
diff options
context:
space:
mode:
authorrdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-07 00:08:08 +0000
committerrdevlin.cronin@chromium.org <rdevlin.cronin@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2013-09-07 00:08:08 +0000
commit2fb9bd24e13c39b4708ec809987d2fbfe511729a (patch)
tree3f2dd55814e720d33213f4dcaa816e12de053fd4 /extensions/browser/file_highlighter.h
parentcc81ed067fe64090a35f3ce25a444b263010dbcf (diff)
downloadchromium_src-2fb9bd24e13c39b4708ec809987d2fbfe511729a.zip
chromium_src-2fb9bd24e13c39b4708ec809987d2fbfe511729a.tar.gz
chromium_src-2fb9bd24e13c39b4708ec809987d2fbfe511729a.tar.bz2
Follows https://codereview.chromium.org/22938005/
Add UI elements for extension runtime (javascript) errors on the chrome:extensions page. Include a stack trace and, if possible, links to the source code. TBR=finnur@chromium.org BUG=21734 Review URL: https://chromiumcodereview.appspot.com/23624002 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@221824 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'extensions/browser/file_highlighter.h')
-rw-r--r--extensions/browser/file_highlighter.h112
1 files changed, 112 insertions, 0 deletions
diff --git a/extensions/browser/file_highlighter.h b/extensions/browser/file_highlighter.h
new file mode 100644
index 0000000..c4beaf3
--- /dev/null
+++ b/extensions/browser/file_highlighter.h
@@ -0,0 +1,112 @@
+// Copyright 2013 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.
+
+#ifndef EXTENSIONS_BROWSER_FILE_HIGHLIGHTER_H_
+#define EXTENSIONS_BROWSER_FILE_HIGHLIGHTER_H_
+
+#include <string>
+
+#include "base/basictypes.h"
+
+namespace base {
+class DictionaryValue;
+}
+
+namespace extensions {
+
+// The FileHighlighter class is used in order to isolate and highlight a portion
+// of a given file (in string form). The Highlighter will split the source into
+// three portions: the portion before the highlighted feature, the highlighted
+// feature, and the portion following the highlighted feature.
+// The file will be parsed for highlighting upon construction of the Highlighter
+// object.
+class FileHighlighter {
+ public:
+ virtual ~FileHighlighter();
+
+ // Get the portion of the manifest which should not be highlighted and is
+ // before the feature.
+ std::string GetBeforeFeature() const;
+
+ // Get the feature portion of the manifest, which should be highlighted.
+ std::string GetFeature() const;
+
+ // Get the portion of the manifest which should not be highlighted and is
+ // after the feature.
+ std::string GetAfterFeature() const;
+
+ // Populate a DictionaryValue with the highlighted portions (in UTF16) of the
+ // source file.
+ void SetHighlightedRegions(base::DictionaryValue* dict) const;
+
+ protected:
+ FileHighlighter(const std::string& contents);
+
+ // The contents of the file we are parsing.
+ std::string contents_;
+
+ // The start of the feature.
+ size_t start_;
+
+ // The end of the feature.
+ size_t end_;
+
+ DISALLOW_COPY_AND_ASSIGN(FileHighlighter);
+};
+
+// Use the ManifestHighlighter class to find the bounds of a feature in the
+// manifest.
+// A feature can be at any level in the hierarchy. The "start" of a feature is
+// the first character of the feature name, or the beginning quote of the name,
+// if present. The "end" of a feature is wherever the next item at the same
+// level starts.
+// For instance, the bounds for the 'permissions' feature at the top level could
+// be '"permissions": { "tabs", "history", "downloads" }', but the feature for
+// 'tabs' within 'permissions' would just be '"tabs"'.
+// We can't use the JSONParser to do this, because we want to display the actual
+// manifest, and once we parse it into Values, we lose any formatting the user
+// may have had.
+// If a feature cannot be found, the feature will have zero-length.
+class ManifestHighlighter : public FileHighlighter {
+ public:
+ ManifestHighlighter(const std::string& manifest,
+ const std::string& key,
+ const std::string& specific /* optional */);
+ virtual ~ManifestHighlighter();
+
+ private:
+ // Called from the constructor; determine the start and end bounds of a
+ // feature, using both the key and specific information.
+ void Parse(const std::string& key, const std::string& specific);
+
+ // Find the bounds of any feature, either a full key or a specific item within
+ // the key. |enforce_at_top_level| means that the feature we find must be at
+ // the same level as |start_| (i.e., ignore nested elements).
+ // Returns true on success.
+ bool FindBounds(const std::string& feature, bool enforce_at_top_level);
+
+ // Finds the end of the feature.
+ void FindBoundsEnd(const std::string& feature, size_t local_start);
+
+ DISALLOW_COPY_AND_ASSIGN(ManifestHighlighter);
+};
+
+// Use the SourceHighlighter to highlight a particular line in a given source
+// file.
+class SourceHighlighter : public FileHighlighter {
+ public:
+ SourceHighlighter(const std::string& source, size_t line_number);
+ virtual ~SourceHighlighter();
+
+ private:
+ // Called from the constructor; determine the bounds of the line in the source
+ // file.
+ void Parse(size_t line_number);
+
+ DISALLOW_COPY_AND_ASSIGN(SourceHighlighter);
+};
+
+} // namespace extensions
+
+#endif // EXTENSIONS_BROWSER_FILE_HIGHLIGHTER_H_