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

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

Issue 10873029: Migrate WebRequestRedirectByRegExAction to use RE2 and roll RE2 to revision 97:401ab4168e8e (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Merged with ToT 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: 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 d0059034a960cbda4fceda23d3dc886e4e0a0fe1..38eacbf45e477534e8d0cb88fb4b3e82aa0a6e66 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_stage.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 {
@@ -108,20 +108,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(
@@ -579,7 +577,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()) {}
@@ -654,29 +652,17 @@ LinkedPtrEventResponseDelta WebRequestRedirectByRegExAction::CreateDelta(
CHECK(request_data.stage & GetStages());
CHECK(from_pattern_.get());
- UErrorCode status = U_ZERO_ERROR;
const std::string& old_url = request_data.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_data.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