|
|
@ -77,7 +77,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
|
|
|
|
|
|
|
|
private DrawerLayout mDrawerLayout; |
|
|
|
private DrawerLayout mDrawerLayout; |
|
|
|
private ListView mDrawerListLeft; |
|
|
|
private ListView mDrawerListLeft; |
|
|
|
private RelativeLayout mDrawerLeft; |
|
|
|
private LinearLayout mDrawerLeft; |
|
|
|
private LinearLayout mDrawerRight; |
|
|
|
private LinearLayout mDrawerRight; |
|
|
|
private ListView mDrawerListRight; |
|
|
|
private ListView mDrawerListRight; |
|
|
|
private RelativeLayout mNewTab; |
|
|
|
private RelativeLayout mNewTab; |
|
|
@ -171,15 +171,20 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
// mProgressBar.setVisibility(View.GONE);
|
|
|
|
// mProgressBar.setVisibility(View.GONE);
|
|
|
|
// TODO
|
|
|
|
// TODO
|
|
|
|
mNewTab = (RelativeLayout) findViewById(R.id.new_tab_button); |
|
|
|
mNewTab = (RelativeLayout) findViewById(R.id.new_tab_button); |
|
|
|
mDrawerLeft = (RelativeLayout) findViewById(R.id.left_drawer); |
|
|
|
mDrawerLeft = (LinearLayout) findViewById(R.id.left_drawer); |
|
|
|
|
|
|
|
mDrawerLeft.setLayerType(View.LAYER_TYPE_HARDWARE, null); // Drawer
|
|
|
|
|
|
|
|
// stutters
|
|
|
|
|
|
|
|
// otherwise
|
|
|
|
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); |
|
|
|
mDrawerLayout = (DrawerLayout) findViewById(R.id.drawer_layout); |
|
|
|
mDrawerListLeft = (ListView) findViewById(R.id.left_drawer_list); |
|
|
|
mDrawerListLeft = (ListView) findViewById(R.id.left_drawer_list); |
|
|
|
mDrawerListLeft.setDivider(null); |
|
|
|
mDrawerListLeft.setDivider(null); |
|
|
|
mDrawerListLeft.setDividerHeight(0); |
|
|
|
mDrawerListLeft.setDividerHeight(0); |
|
|
|
mDrawerRight = (LinearLayout) findViewById(R.id.right_drawer); |
|
|
|
mDrawerRight = (LinearLayout) findViewById(R.id.right_drawer); |
|
|
|
|
|
|
|
mDrawerRight.setLayerType(View.LAYER_TYPE_HARDWARE, null); |
|
|
|
mDrawerListRight = (ListView) findViewById(R.id.right_drawer_list); |
|
|
|
mDrawerListRight = (ListView) findViewById(R.id.right_drawer_list); |
|
|
|
mDrawerListRight.setDivider(null); |
|
|
|
mDrawerListRight.setDivider(null); |
|
|
|
mDrawerListRight.setDividerHeight(0); |
|
|
|
mDrawerListRight.setDividerHeight(0); |
|
|
|
|
|
|
|
|
|
|
|
setNavigationDrawerWidth(); |
|
|
|
setNavigationDrawerWidth(); |
|
|
|
mDrawerLayout.setDrawerListener(new DrawerLocker()); |
|
|
|
mDrawerLayout.setDrawerListener(new DrawerLocker()); |
|
|
|
|
|
|
|
|
|
|
@ -232,6 +237,11 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
|
|
|
|
|
|
|
|
mArrowDrawable = new DrawerArrowDrawable(this); |
|
|
|
mArrowDrawable = new DrawerArrowDrawable(this); |
|
|
|
mArrowImage = (ImageView) mActionBar.getCustomView().findViewById(R.id.arrow); |
|
|
|
mArrowImage = (ImageView) mActionBar.getCustomView().findViewById(R.id.arrow); |
|
|
|
|
|
|
|
mArrowImage.setLayerType(View.LAYER_TYPE_HARDWARE, null); // Use a
|
|
|
|
|
|
|
|
// hardware
|
|
|
|
|
|
|
|
// layer for
|
|
|
|
|
|
|
|
// the
|
|
|
|
|
|
|
|
// animation
|
|
|
|
mArrowImage.setImageDrawable(mArrowDrawable); |
|
|
|
mArrowImage.setImageDrawable(mArrowDrawable); |
|
|
|
LinearLayout arrowButton = (LinearLayout) mActionBar.getCustomView().findViewById( |
|
|
|
LinearLayout arrowButton = (LinearLayout) mActionBar.getCustomView().findViewById( |
|
|
|
R.id.arrow_button); |
|
|
|
R.id.arrow_button); |
|
|
@ -399,17 +409,22 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void onFocusChange(View v, final boolean hasFocus) { |
|
|
|
public void onFocusChange(View v, final boolean hasFocus) { |
|
|
|
if (!hasFocus && mCurrentView != null) { |
|
|
|
if (!hasFocus && mCurrentView != null) { |
|
|
|
if (mCurrentView != null) { |
|
|
|
|
|
|
|
if (mCurrentView.getProgress() < 100) { |
|
|
|
if (mCurrentView.getProgress() < 100) { |
|
|
|
setIsLoading(); |
|
|
|
setIsLoading(); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
setIsFinishedLoading(); |
|
|
|
setIsFinishedLoading(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
updateUrl(mCurrentView.getUrl(), true); |
|
|
|
updateUrl(mCurrentView.getUrl(), true); |
|
|
|
} else if (hasFocus) { |
|
|
|
} else if (hasFocus) { |
|
|
|
updateUrl(mCurrentView.getUrl(), false); |
|
|
|
String url = mCurrentView.getUrl(); |
|
|
|
mSearch.selectAll(); |
|
|
|
if (url == null || url.startsWith(Constants.FILE)) { |
|
|
|
|
|
|
|
mSearch.setText(""); |
|
|
|
|
|
|
|
} else { |
|
|
|
|
|
|
|
mSearch.setText(url); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
((AutoCompleteTextView) v).selectAll(); // Hack to make sure
|
|
|
|
|
|
|
|
// the text gets
|
|
|
|
|
|
|
|
// selected
|
|
|
|
mIcon = mCopyIcon; |
|
|
|
mIcon = mCopyIcon; |
|
|
|
mSearch.setCompoundDrawables(null, null, mCopyIcon, null); |
|
|
|
mSearch.setCompoundDrawables(null, null, mCopyIcon, null); |
|
|
|
} |
|
|
|
} |
|
|
@ -578,8 +593,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
if (mCurrentView != null) { |
|
|
|
if (mCurrentView != null) { |
|
|
|
if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { |
|
|
|
if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { |
|
|
|
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); |
|
|
|
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); |
|
|
|
ClipData clip = ClipData.newPlainText("label", mCurrentView.getUrl() |
|
|
|
ClipData clip = ClipData.newPlainText("label", mCurrentView.getUrl()); |
|
|
|
.toString()); |
|
|
|
|
|
|
|
clipboard.setPrimaryClip(clip); |
|
|
|
clipboard.setPrimaryClip(clip); |
|
|
|
Utils.showToast(mContext, |
|
|
|
Utils.showToast(mContext, |
|
|
|
mContext.getResources().getString(R.string.message_link_copied)); |
|
|
|
mContext.getResources().getString(R.string.message_link_copied)); |
|
|
@ -653,7 +667,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
.setNegativeButton(R.string.no, dialogClickListener).show(); |
|
|
|
.setNegativeButton(R.string.no, dialogClickListener).show(); |
|
|
|
|
|
|
|
|
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} else if (oh.isOrbotInstalled() & useProxy == true) { |
|
|
|
} else if (oh.isOrbotInstalled() & useProxy) { |
|
|
|
initializeTor(); |
|
|
|
initializeTor(); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} else { |
|
|
|
} else { |
|
|
@ -691,19 +705,23 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
.getLayoutParams(); |
|
|
|
.getLayoutParams(); |
|
|
|
params.width = maxWidth; |
|
|
|
params.width = maxWidth; |
|
|
|
mDrawerLeft.setLayoutParams(params); |
|
|
|
mDrawerLeft.setLayoutParams(params); |
|
|
|
|
|
|
|
mDrawerLeft.requestLayout(); |
|
|
|
DrawerLayout.LayoutParams paramsRight = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerRight |
|
|
|
DrawerLayout.LayoutParams paramsRight = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerRight |
|
|
|
.getLayoutParams(); |
|
|
|
.getLayoutParams(); |
|
|
|
paramsRight.width = maxWidth; |
|
|
|
paramsRight.width = maxWidth; |
|
|
|
mDrawerRight.setLayoutParams(paramsRight); |
|
|
|
mDrawerRight.setLayoutParams(paramsRight); |
|
|
|
|
|
|
|
mDrawerRight.requestLayout(); |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
DrawerLayout.LayoutParams params = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerLeft |
|
|
|
DrawerLayout.LayoutParams params = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerLeft |
|
|
|
.getLayoutParams(); |
|
|
|
.getLayoutParams(); |
|
|
|
params.width = width; |
|
|
|
params.width = width; |
|
|
|
mDrawerLeft.setLayoutParams(params); |
|
|
|
mDrawerLeft.setLayoutParams(params); |
|
|
|
|
|
|
|
mDrawerLeft.requestLayout(); |
|
|
|
DrawerLayout.LayoutParams paramsRight = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerRight |
|
|
|
DrawerLayout.LayoutParams paramsRight = (android.support.v4.widget.DrawerLayout.LayoutParams) mDrawerRight |
|
|
|
.getLayoutParams(); |
|
|
|
.getLayoutParams(); |
|
|
|
paramsRight.width = width; |
|
|
|
paramsRight.width = width; |
|
|
|
mDrawerRight.setLayoutParams(paramsRight); |
|
|
|
mDrawerRight.setLayoutParams(paramsRight); |
|
|
|
|
|
|
|
mDrawerRight.requestLayout(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -729,7 +747,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
} |
|
|
|
} |
|
|
|
if (mPreferences.getBoolean(PreferenceConstants.RESTORE_LOST_TABS, true)) { |
|
|
|
if (mPreferences.getBoolean(PreferenceConstants.RESTORE_LOST_TABS, true)) { |
|
|
|
String mem = mPreferences.getString(PreferenceConstants.URL_MEMORY, ""); |
|
|
|
String mem = mPreferences.getString(PreferenceConstants.URL_MEMORY, ""); |
|
|
|
mEditPrefs.putString(PreferenceConstants.URL_MEMORY, ""); |
|
|
|
mEditPrefs.putString(PreferenceConstants.URL_MEMORY, "").apply(); |
|
|
|
String[] array = Utils.getArray(mem); |
|
|
|
String[] array = Utils.getArray(mem); |
|
|
|
int count = 0; |
|
|
|
int count = 0; |
|
|
|
for (int n = 0; n < array.length; n++) { |
|
|
|
for (int n = 0; n < array.length; n++) { |
|
|
@ -899,8 +917,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
if (mCurrentView != null) { |
|
|
|
if (mCurrentView != null) { |
|
|
|
if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { |
|
|
|
if (!mCurrentView.getUrl().startsWith(Constants.FILE)) { |
|
|
|
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); |
|
|
|
ClipboardManager clipboard = (ClipboardManager) getSystemService(CLIPBOARD_SERVICE); |
|
|
|
ClipData clip = ClipData.newPlainText("label", mCurrentView.getUrl() |
|
|
|
ClipData clip = ClipData.newPlainText("label", mCurrentView.getUrl()); |
|
|
|
.toString()); |
|
|
|
|
|
|
|
clipboard.setPrimaryClip(clip); |
|
|
|
clipboard.setPrimaryClip(clip); |
|
|
|
Utils.showToast(mContext, |
|
|
|
Utils.showToast(mContext, |
|
|
|
mContext.getResources().getString(R.string.message_link_copied)); |
|
|
|
mContext.getResources().getString(R.string.message_link_copied)); |
|
|
@ -1006,25 +1023,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
}); |
|
|
|
}); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
private void showCloseDialog(final int position) { |
|
|
|
* The click listener for ListView in the navigation drawer |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private class DrawerItemClickListener implements ListView.OnItemClickListener { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
|
|
|
|
|
|
|
mIsNewIntent = false; |
|
|
|
|
|
|
|
selectItem(position); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* long click listener for Navigation Drawer |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private class DrawerItemLongClickListener implements ListView.OnItemLongClickListener { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int position, long arg3) { |
|
|
|
|
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(mContext); |
|
|
|
AlertDialog.Builder builder = new AlertDialog.Builder(mContext); |
|
|
|
ArrayAdapter<String> adapter = new ArrayAdapter<>(mContext, |
|
|
|
ArrayAdapter<String> adapter = new ArrayAdapter<>(mContext, |
|
|
|
android.R.layout.simple_dropdown_item_1line); |
|
|
|
android.R.layout.simple_dropdown_item_1line); |
|
|
@ -1047,6 +1046,28 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
} |
|
|
|
} |
|
|
|
}); |
|
|
|
}); |
|
|
|
builder.show(); |
|
|
|
builder.show(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* The click listener for ListView in the navigation drawer |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private class DrawerItemClickListener implements ListView.OnItemClickListener { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public void onItemClick(AdapterView<?> parent, View view, int position, long id) { |
|
|
|
|
|
|
|
mIsNewIntent = false; |
|
|
|
|
|
|
|
selectItem(position); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/** |
|
|
|
|
|
|
|
* long click listener for Navigation Drawer |
|
|
|
|
|
|
|
*/ |
|
|
|
|
|
|
|
private class DrawerItemLongClickListener implements ListView.OnItemLongClickListener { |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|
|
|
public boolean onItemLongClick(AdapterView<?> arg0, View arg1, final int position, long arg3) { |
|
|
|
|
|
|
|
showCloseDialog(position); |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
@ -1339,10 +1360,8 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
Log.d(Constants.TAG, "Cookies Cleared"); |
|
|
|
Log.d(Constants.TAG, "Cookies Cleared"); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
if (reference != null) { |
|
|
|
|
|
|
|
reference.pauseTimers(); |
|
|
|
reference.pauseTimers(); |
|
|
|
reference.onDestroy(); |
|
|
|
reference.onDestroy(); |
|
|
|
} |
|
|
|
|
|
|
|
mCurrentView = null; |
|
|
|
mCurrentView = null; |
|
|
|
mTitleAdapter.notifyDataSetChanged(); |
|
|
|
mTitleAdapter.notifyDataSetChanged(); |
|
|
|
finish(); |
|
|
|
finish(); |
|
|
@ -1362,33 +1381,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public boolean onKeyLongPress(int keyCode, KeyEvent event) { |
|
|
|
public boolean onKeyLongPress(int keyCode, KeyEvent event) { |
|
|
|
if (keyCode == KeyEvent.KEYCODE_BACK) { |
|
|
|
if (keyCode == KeyEvent.KEYCODE_BACK) { |
|
|
|
if (mPreferences.getBoolean(PreferenceConstants.CLEAR_CACHE_EXIT, false) |
|
|
|
showCloseDialog(mDrawerListLeft.getCheckedItemPosition()); |
|
|
|
&& mCurrentView != null && !isIncognito()) { |
|
|
|
|
|
|
|
mCurrentView.clearCache(true); |
|
|
|
|
|
|
|
Log.d(Constants.TAG, "Cache Cleared"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (mPreferences.getBoolean(PreferenceConstants.CLEAR_HISTORY_EXIT, false) |
|
|
|
|
|
|
|
&& !isIncognito()) { |
|
|
|
|
|
|
|
clearHistory(); |
|
|
|
|
|
|
|
Log.d(Constants.TAG, "History Cleared"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
if (mPreferences.getBoolean(PreferenceConstants.CLEAR_COOKIES_EXIT, false) |
|
|
|
|
|
|
|
&& !isIncognito()) { |
|
|
|
|
|
|
|
clearCookies(); |
|
|
|
|
|
|
|
Log.d(Constants.TAG, "Cookies Cleared"); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
mCurrentView = null; |
|
|
|
|
|
|
|
for (int n = 0; n < mWebViews.size(); n++) { |
|
|
|
|
|
|
|
if (mWebViews.get(n) != null) { |
|
|
|
|
|
|
|
mWebViews.get(n).onDestroy(); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
mWebViews.clear(); |
|
|
|
|
|
|
|
mTitleAdapter.notifyDataSetChanged(); |
|
|
|
|
|
|
|
finish(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
return true; |
|
|
|
return true; |
|
|
|
} |
|
|
|
} |
|
|
@ -1502,8 +1495,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
s = s + mWebViews.get(n).getUrl() + "|$|SEPARATOR|$|"; |
|
|
|
s = s + mWebViews.get(n).getUrl() + "|$|SEPARATOR|$|"; |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
mEditPrefs.putString(PreferenceConstants.URL_MEMORY, s); |
|
|
|
mEditPrefs.putString(PreferenceConstants.URL_MEMORY, s).commit(); |
|
|
|
mEditPrefs.commit(); |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
@ -1822,8 +1814,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
} catch (Exception e) { |
|
|
|
} finally { |
|
|
|
e.printStackTrace(); |
|
|
|
|
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} else { |
|
|
|
} else { |
|
|
|
// if it exists, retrieve it from the cache
|
|
|
|
// if it exists, retrieve it from the cache
|
|
|
@ -1850,6 +1841,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
} catch (Exception e) { |
|
|
|
} catch (Exception e) { |
|
|
|
|
|
|
|
e.printStackTrace(); |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
if (mIcon == null) { |
|
|
|
if (mIcon == null) { |
|
|
@ -1878,7 +1870,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
@Override |
|
|
|
public void updateUrl(String url, boolean shortUrl) { |
|
|
|
public void updateUrl(String url, boolean shortUrl) { |
|
|
|
if (url == null) { |
|
|
|
if (url == null || mSearch == null || mSearch.hasFocus()) { |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (shortUrl) { |
|
|
|
if (shortUrl) { |
|
|
@ -1940,7 +1932,7 @@ public class BrowserActivity extends ActionBarActivity implements BrowserControl |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
try { |
|
|
|
try { |
|
|
|
if (mHistoryHandler == null && !mHistoryHandler.isOpen()) { |
|
|
|
if (mHistoryHandler == null || !mHistoryHandler.isOpen()) { |
|
|
|
mHistoryHandler = new HistoryDatabaseHandler(mContext); |
|
|
|
mHistoryHandler = new HistoryDatabaseHandler(mContext); |
|
|
|
} |
|
|
|
} |
|
|
|
mHistoryHandler.visitHistoryItem(url, title); |
|
|
|
mHistoryHandler.visitHistoryItem(url, title); |
|
|
|