Rietveld Code Review Tool
Help | Bug tracker | Discussion group | Source code

Unified Diff: src/plugin/PluginTabBase.cpp

Issue 5670602698391552: Issue #1234 - Remove CString local variable from CPluginTabBase::InjectABP (Closed)
Patch Set: Created May 20, 2015, 3:52 p.m.
Use n/p to move between diff chunks; N/P to move between comments.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/plugin/PluginTabBase.cpp
===================================================================
--- a/src/plugin/PluginTabBase.cpp
+++ b/src/plugin/PluginTabBase.cpp
@@ -111,25 +111,45 @@
m_traverser->ClearCache();
}
+namespace
+{
+ /**
+ * Determine if the HTML file is one of ours.
+ * The criterion is that it appear in the "html/templates" folder within our installation.
+ *
+ * Warning: This function may fail if the argument is not a "file://" URL.
+ * This is occasionally the case in circumstances yet to be characterized.
Eric 2015/05/20 15:56:32 I see this happen under the debugger regularly, bu
sergei 2015/06/01 09:41:30 I see that it's sometimes in MS-DOS/Windows-style
Eric 2015/06/10 18:30:36 If you'd like to add text to the comment, please p
+ */
+ bool IsOurHtmlFile(std::wstring url)
sergei 2015/06/01 09:41:30 const ref
Eric 2015/06/10 18:30:36 Done.
+ {
+ // Declared static because the value is derived from an installation directory, which won't change during run-time.
+ static auto dir = FileUrl(HtmlFolderPath());
+ static auto dirLength = dir.length();
sergei 2015/06/01 09:41:30 I would say we don't need `dirLength` variable.
Eric 2015/06/10 18:30:36 Done.
+
+ std::wstring log = L"InjectABP. Current URL: ";
+ log += url;
+ log += L", template directory URL: ";
+ log += dir;
+ DEBUG_GENERAL(log);
+
+ auto urlCstr = url.c_str();
sergei 2015/06/01 09:41:30 Actually, this variable is also not necessary.
Eric 2015/06/10 18:30:36 Not strictly, no; it's a small optimization. But e
+ // Check the prefix to match our directory
+ // Check the suffix to be an HTML file
+ return (_wcsnicmp(urlCstr, dir.c_str(), dirLength) == 0) &&
+ (_wcsnicmp(urlCstr + url.length() - 5, L".html", 5) == 0);
sergei 2015/06/01 09:41:30 It would be great to have a comment here explainin
Eric 2015/06/10 18:30:36 We actually need an explicit check, which I've add
+ }
+}
+
void CPluginTabBase::InjectABP(IWebBrowser2* browser)
{
CriticalSection::Lock lock(m_csInject);
auto url = GetDocumentUrl();
-
- std::wstring log = L"InjectABP. Current URL: ";
- log += url;
- log += L", settings URL: ";
- log += UserSettingsFileUrl();
- DEBUG_GENERAL(log);
-
- CString urlLegacy = ToCString(url);
- if (!(0 == urlLegacy.CompareNoCase(CString(UserSettingsFileUrl().c_str())) ||
- 0 == urlLegacy.CompareNoCase(CString(FirstRunPageFileUrl().c_str()))))
+ if (!IsOurHtmlFile(url))
{
- DEBUG_GENERAL(L"Not injecting");
+ DEBUG_GENERAL(L"InjectABP. Not injecting");
return;
}
- DEBUG_GENERAL(L"Going to inject");
+ DEBUG_GENERAL(L"InjectABP. Injecting");
CComPtr<IDispatch> pDocDispatch;
browser->get_Document(&pDocDispatch);
CComQIPtr<IHTMLDocument2> pDoc2 = pDocDispatch;
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld