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

Unified Diff: chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc

Issue 10826120: Migrate WebRequestRedirectByRegExAction to use RE2 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 years, 5 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: chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
diff --git a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
index 9301dc0fc76cead8ed89f95bacd95c96a29dbc58..f3d7acf7c0fa26b3cd7fc72221c7d9957b88a78b 100644
--- a/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
+++ b/chrome/browser/extensions/api/declarative_webrequest/webrequest_action.cc
@@ -10,7 +10,6 @@
#include "base/logging.h"
#include "base/stringprintf.h"
#include "base/string_util.h"
-#include "base/utf_string_conversions.h"
#include "base/values.h"
#include "chrome/browser/extensions/api/declarative_webrequest/request_stages.h"
#include "chrome/browser/extensions/api/declarative_webrequest/webrequest_constants.h"
@@ -19,6 +18,7 @@
#include "chrome/browser/extensions/extension_info_map.h"
#include "chrome/common/extensions/extension.h"
#include "net/url_request/url_request.h"
+#include "third_party/re2/re2/re2.h"
namespace extensions {
@@ -72,20 +72,18 @@ scoped_ptr<WebRequestAction> CreateRedirectRequestByRegExAction(
INPUT_FORMAT_VALIDATE(dict->GetString(keys::kFromKey, &from));
INPUT_FORMAT_VALIDATE(dict->GetString(keys::kToKey, &to));
- // TODO(battre): Add this line once we migrate from ICU RegEx to RE2 RegEx.s
- // to = WebRequestRedirectByRegExAction::PerlToRe2Style(to);
+ to = WebRequestRedirectByRegExAction::PerlToRe2Style(to);
- UParseError parse_error;
- UErrorCode status = U_ZERO_ERROR;
- scoped_ptr<icu::RegexPattern> pattern(
- icu::RegexPattern::compile(icu::UnicodeString(from.data(), from.size()),
- 0, parse_error, status));
- if (U_FAILURE(status) || !pattern.get()) {
+ RE2::Options options;
+ options.set_case_sensitive(false);
+ scoped_ptr<RE2> from_pattern(new RE2(from, options));
+
+ if (!from_pattern->ok()) {
*error = "Invalid pattern '" + from + "' -> '" + to + "'";
return scoped_ptr<WebRequestAction>(NULL);
}
return scoped_ptr<WebRequestAction>(
- new WebRequestRedirectByRegExAction(pattern.Pass(), to));
+ new WebRequestRedirectByRegExAction(from_pattern.Pass(), to));
}
scoped_ptr<WebRequestAction> CreateSetRequestHeaderAction(
@@ -452,7 +450,7 @@ WebRequestRedirectToEmptyDocumentAction::CreateDelta(
//
WebRequestRedirectByRegExAction::WebRequestRedirectByRegExAction(
- scoped_ptr<icu::RegexPattern> from_pattern,
+ scoped_ptr<RE2> from_pattern,
const std::string& to_pattern)
: from_pattern_(from_pattern.Pass()),
to_pattern_(to_pattern.data(), to_pattern.size()) {}
@@ -529,29 +527,17 @@ LinkedPtrEventResponseDelta WebRequestRedirectByRegExAction::CreateDelta(
CHECK(request_stage & GetStages());
CHECK(from_pattern_.get());
- UErrorCode status = U_ZERO_ERROR;
const std::string& old_url = request->url().spec();
- icu::UnicodeString old_url_unicode(old_url.data(), old_url.size());
-
- scoped_ptr<icu::RegexMatcher> matcher(
- from_pattern_->matcher(old_url_unicode, status));
- if (U_FAILURE(status) || !matcher.get())
- return LinkedPtrEventResponseDelta(NULL);
-
- icu::UnicodeString new_url = matcher->replaceAll(to_pattern_, status);
- if (U_FAILURE(status))
- return LinkedPtrEventResponseDelta(NULL);
-
- std::string new_url_utf8;
- UTF16ToUTF8(new_url.getBuffer(), new_url.length(), &new_url_utf8);
-
- if (new_url_utf8 == request->url().spec())
+ std::string new_url = old_url;
+ if (!RE2::Replace(&new_url, *from_pattern_, to_pattern_) ||
+ new_url == old_url) {
return LinkedPtrEventResponseDelta(NULL);
+ }
LinkedPtrEventResponseDelta result(
new extension_web_request_api_helpers::EventResponseDelta(
extension_id, extension_install_time));
- result->new_url = GURL(new_url_utf8);
+ result->new_url = GURL(new_url);
return result;
}
« no previous file with comments | « chrome/browser/extensions/api/declarative_webrequest/webrequest_action.h ('k') | chrome/chrome_browser_extensions.gypi » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698