Commit Graph

1475 Commits

Author SHA1 Message Date
Nathan Froyd
01583602a9 Bug 1207245 - part 6 - rename nsRefPtr<T> to RefPtr<T>; r=ehsan; a=Tomcat
The bulk of this commit was generated with a script, executed at the top
level of a typical source code checkout.  The only non-machine-generated
part was modifying MFBT's moz.build to reflect the new naming.

CLOSED TREE makes big refactorings like this a piece of cake.

 # The main substitution.
find . -name '*.cpp' -o -name '*.cc' -o -name '*.h' -o -name '*.mm' -o -name '*.idl'| \
    xargs perl -p -i -e '
 s/nsRefPtr\.h/RefPtr\.h/g; # handle includes
 s/nsRefPtr ?</RefPtr</g;   # handle declarations and variables
'

 # Handle a special friend declaration in gfx/layers/AtomicRefCountedWithFinalize.h.
perl -p -i -e 's/::nsRefPtr;/::RefPtr;/' gfx/layers/AtomicRefCountedWithFinalize.h

 # Handle nsRefPtr.h itself, a couple places that define constructors
 # from nsRefPtr, and code generators specially.  We do this here, rather
 # than indiscriminantly s/nsRefPtr/RefPtr/, because that would rename
 # things like nsRefPtrHashtable.
perl -p -i -e 's/nsRefPtr/RefPtr/g' \
     mfbt/nsRefPtr.h \
     xpcom/glue/nsCOMPtr.h \
     xpcom/base/OwningNonNull.h \
     ipc/ipdl/ipdl/lower.py \
     ipc/ipdl/ipdl/builtin.py \
     dom/bindings/Codegen.py \
     python/lldbutils/lldbutils/utils.py

 # In our indiscriminate substitution above, we renamed
 # nsRefPtrGetterAddRefs, the class behind getter_AddRefs.  Fix that up.
find . -name '*.cpp' -o -name '*.h' -o -name '*.idl' | \
    xargs perl -p -i -e 's/nsRefPtrGetterAddRefs/RefPtrGetterAddRefs/g'

if [ -d .git ]; then
    git mv mfbt/nsRefPtr.h mfbt/RefPtr.h
else
    hg mv mfbt/nsRefPtr.h mfbt/RefPtr.h
fi

--HG--
rename : mfbt/nsRefPtr.h => mfbt/RefPtr.h
2015-10-18 01:24:48 -04:00
Yoshi Huang
fb57af4ae6 Bug 1191653 - Listen to clear-origin-data in nsPermissionManager. r=bholley 2015-10-13 10:27:42 +08:00
Tim Taubert
c3ced0a78e Bug 1001691 - Implement WebCrypto thread pool r=bz 2015-09-11 16:01:20 +02:00
Boris Zbarsky
3f6a60d5c6 Bug 1209658 part 2. Add text/json and text/vtt as text MIME types. r=bkelly
--HG--
rename : parser/htmlparser/tests/mochitest/test_bug667533.html => parser/htmlparser/tests/mochitest/test_bug1209658.html
2015-10-05 12:23:26 -04:00
Boris Zbarsky
880bb3fc42 Bug 1209658 part 1. Refactor some parts of nsContentDLF to reduce code duplication and improve readability a bit. r=bkelly 2015-10-05 12:23:25 -04:00
Josh Matthews
fbb088e702 Bug 885982 - Part 3: Add e10s support to TCPSocket and TCPServerSocket. r=asuth,mayhemer,bz 2015-03-25 10:36:56 -04:00
Christoph Kerschbaumer
6d3847c487 Bug 1204703 - Make nsContentSecurityManager scriptable (r=sicking)
--HG--
extra : source : 977d5b7ecba32a0617d40c231e2f16963bf4a4ef
2015-09-18 09:27:15 -07:00
Wes Kocher
8414be2356 Backed out 3 changesets (bug 1143922) for landing with the wrong bug number
Backed out changeset 309b4d1ab81c (bug 1143922)
Backed out changeset deda472458fd (bug 1143922)
Backed out changeset 977d5b7ecba3 (bug 1143922)
2015-09-18 14:13:33 -07:00
Christoph Kerschbaumer
b01fc3ad90 Bug 1143922 - Make nsContentSecurityManager scriptable (r=sicking) 2015-09-18 09:27:15 -07:00
Hiroyuki Ikezoe
e66cf160a7 Bug 1151694 - Part 1 - Move CommonAnimationManager::sLayerAnimationInfo into LayerAnimationInfo.(cpp|h). r=bbirtles
--HG--
extra : rebase_source : 1226660e3e42a534d4c8b4f72c00888356a708fb
2015-09-03 22:59:00 +02:00
Nicholas Nethercote
f44287005f Bug 1198334 (part 1) - Replace the opt-in FAIL_ON_WARNINGS with the opt-out ALLOW_COMPILER_WARNINGS. r=glandium.
The patch removes 455 occurrences of FAIL_ON_WARNINGS from moz.build files, and
adds 78 instances of ALLOW_COMPILER_WARNINGS. About half of those 78 are in
code we control and which should be removable with a little effort.

--HG--
extra : rebase_source : 82e3387abfbd5f1471e953961d301d3d97ed2973
2015-08-27 20:44:53 -07:00
Ben Tian
f9389ddddf Bug 1193379 - Create dom/bluetooth/common/webapi folder. r=joliu
--HG--
rename : dom/bluetooth/common/BluetoothAdapter.cpp => dom/bluetooth/common/webapi/BluetoothAdapter.cpp
rename : dom/bluetooth/common/BluetoothAdapter.h => dom/bluetooth/common/webapi/BluetoothAdapter.h
rename : dom/bluetooth/common/BluetoothClassOfDevice.cpp => dom/bluetooth/common/webapi/BluetoothClassOfDevice.cpp
rename : dom/bluetooth/common/BluetoothClassOfDevice.h => dom/bluetooth/common/webapi/BluetoothClassOfDevice.h
rename : dom/bluetooth/common/BluetoothDevice.cpp => dom/bluetooth/common/webapi/BluetoothDevice.cpp
rename : dom/bluetooth/common/BluetoothDevice.h => dom/bluetooth/common/webapi/BluetoothDevice.h
rename : dom/bluetooth/common/BluetoothDiscoveryHandle.cpp => dom/bluetooth/common/webapi/BluetoothDiscoveryHandle.cpp
rename : dom/bluetooth/common/BluetoothDiscoveryHandle.h => dom/bluetooth/common/webapi/BluetoothDiscoveryHandle.h
rename : dom/bluetooth/common/BluetoothGatt.cpp => dom/bluetooth/common/webapi/BluetoothGatt.cpp
rename : dom/bluetooth/common/BluetoothGatt.h => dom/bluetooth/common/webapi/BluetoothGatt.h
rename : dom/bluetooth/common/BluetoothGattCharacteristic.cpp => dom/bluetooth/common/webapi/BluetoothGattCharacteristic.cpp
rename : dom/bluetooth/common/BluetoothGattCharacteristic.h => dom/bluetooth/common/webapi/BluetoothGattCharacteristic.h
rename : dom/bluetooth/common/BluetoothGattDescriptor.cpp => dom/bluetooth/common/webapi/BluetoothGattDescriptor.cpp
rename : dom/bluetooth/common/BluetoothGattDescriptor.h => dom/bluetooth/common/webapi/BluetoothGattDescriptor.h
rename : dom/bluetooth/common/BluetoothGattServer.cpp => dom/bluetooth/common/webapi/BluetoothGattServer.cpp
rename : dom/bluetooth/common/BluetoothGattServer.h => dom/bluetooth/common/webapi/BluetoothGattServer.h
rename : dom/bluetooth/common/BluetoothGattService.cpp => dom/bluetooth/common/webapi/BluetoothGattService.cpp
rename : dom/bluetooth/common/BluetoothGattService.h => dom/bluetooth/common/webapi/BluetoothGattService.h
rename : dom/bluetooth/common/BluetoothLeDeviceEvent.cpp => dom/bluetooth/common/webapi/BluetoothLeDeviceEvent.cpp
rename : dom/bluetooth/common/BluetoothLeDeviceEvent.h => dom/bluetooth/common/webapi/BluetoothLeDeviceEvent.h
rename : dom/bluetooth/common/BluetoothManager.cpp => dom/bluetooth/common/webapi/BluetoothManager.cpp
rename : dom/bluetooth/common/BluetoothManager.h => dom/bluetooth/common/webapi/BluetoothManager.h
rename : dom/bluetooth/common/BluetoothPairingHandle.cpp => dom/bluetooth/common/webapi/BluetoothPairingHandle.cpp
rename : dom/bluetooth/common/BluetoothPairingHandle.h => dom/bluetooth/common/webapi/BluetoothPairingHandle.h
rename : dom/bluetooth/common/BluetoothPairingListener.cpp => dom/bluetooth/common/webapi/BluetoothPairingListener.cpp
rename : dom/bluetooth/common/BluetoothPairingListener.h => dom/bluetooth/common/webapi/BluetoothPairingListener.h
rename : dom/bluetooth/common/BluetoothPbapRequestHandle.cpp => dom/bluetooth/common/webapi/BluetoothPbapRequestHandle.cpp
rename : dom/bluetooth/common/BluetoothPbapRequestHandle.h => dom/bluetooth/common/webapi/BluetoothPbapRequestHandle.h
2015-08-21 15:15:41 +08:00
Ben Tian
44c939383c Bug 1193379 - Rename bluetooth2 folder to common. r=joliu
--HG--
rename : dom/bluetooth/bluetooth2/BluetoothAdapter.cpp => dom/bluetooth/common/BluetoothAdapter.cpp
rename : dom/bluetooth/bluetooth2/BluetoothAdapter.h => dom/bluetooth/common/BluetoothAdapter.h
rename : dom/bluetooth/bluetooth2/BluetoothClassOfDevice.cpp => dom/bluetooth/common/BluetoothClassOfDevice.cpp
rename : dom/bluetooth/bluetooth2/BluetoothClassOfDevice.h => dom/bluetooth/common/BluetoothClassOfDevice.h
rename : dom/bluetooth/bluetooth2/BluetoothDevice.cpp => dom/bluetooth/common/BluetoothDevice.cpp
rename : dom/bluetooth/bluetooth2/BluetoothDevice.h => dom/bluetooth/common/BluetoothDevice.h
rename : dom/bluetooth/bluetooth2/BluetoothDiscoveryHandle.cpp => dom/bluetooth/common/BluetoothDiscoveryHandle.cpp
rename : dom/bluetooth/bluetooth2/BluetoothDiscoveryHandle.h => dom/bluetooth/common/BluetoothDiscoveryHandle.h
rename : dom/bluetooth/bluetooth2/BluetoothGatt.cpp => dom/bluetooth/common/BluetoothGatt.cpp
rename : dom/bluetooth/bluetooth2/BluetoothGatt.h => dom/bluetooth/common/BluetoothGatt.h
rename : dom/bluetooth/bluetooth2/BluetoothGattCharacteristic.cpp => dom/bluetooth/common/BluetoothGattCharacteristic.cpp
rename : dom/bluetooth/bluetooth2/BluetoothGattCharacteristic.h => dom/bluetooth/common/BluetoothGattCharacteristic.h
rename : dom/bluetooth/bluetooth2/BluetoothGattDescriptor.cpp => dom/bluetooth/common/BluetoothGattDescriptor.cpp
rename : dom/bluetooth/bluetooth2/BluetoothGattDescriptor.h => dom/bluetooth/common/BluetoothGattDescriptor.h
rename : dom/bluetooth/bluetooth2/BluetoothGattServer.cpp => dom/bluetooth/common/BluetoothGattServer.cpp
rename : dom/bluetooth/bluetooth2/BluetoothGattServer.h => dom/bluetooth/common/BluetoothGattServer.h
rename : dom/bluetooth/bluetooth2/BluetoothGattService.cpp => dom/bluetooth/common/BluetoothGattService.cpp
rename : dom/bluetooth/bluetooth2/BluetoothGattService.h => dom/bluetooth/common/BluetoothGattService.h
rename : dom/bluetooth/bluetooth2/BluetoothLeDeviceEvent.cpp => dom/bluetooth/common/BluetoothLeDeviceEvent.cpp
rename : dom/bluetooth/bluetooth2/BluetoothLeDeviceEvent.h => dom/bluetooth/common/BluetoothLeDeviceEvent.h
rename : dom/bluetooth/bluetooth2/BluetoothManager.cpp => dom/bluetooth/common/BluetoothManager.cpp
rename : dom/bluetooth/bluetooth2/BluetoothManager.h => dom/bluetooth/common/BluetoothManager.h
rename : dom/bluetooth/bluetooth2/BluetoothPairingHandle.cpp => dom/bluetooth/common/BluetoothPairingHandle.cpp
rename : dom/bluetooth/bluetooth2/BluetoothPairingHandle.h => dom/bluetooth/common/BluetoothPairingHandle.h
rename : dom/bluetooth/bluetooth2/BluetoothPairingListener.cpp => dom/bluetooth/common/BluetoothPairingListener.cpp
rename : dom/bluetooth/bluetooth2/BluetoothPairingListener.h => dom/bluetooth/common/BluetoothPairingListener.h
rename : dom/bluetooth/bluetooth2/BluetoothProfileController.cpp => dom/bluetooth/common/BluetoothProfileController.cpp
rename : dom/bluetooth/bluetooth2/BluetoothProfileController.h => dom/bluetooth/common/BluetoothProfileController.h
rename : dom/bluetooth/bluetooth2/BluetoothReplyRunnable.cpp => dom/bluetooth/common/BluetoothReplyRunnable.cpp
rename : dom/bluetooth/bluetooth2/BluetoothReplyRunnable.h => dom/bluetooth/common/BluetoothReplyRunnable.h
rename : dom/bluetooth/bluetooth2/BluetoothService.cpp => dom/bluetooth/common/BluetoothService.cpp
rename : dom/bluetooth/bluetooth2/BluetoothService.h => dom/bluetooth/common/BluetoothService.h
2015-08-21 15:19:12 +08:00
Andrew Osmond
12d520af6a Bug 1186273 - Part 1. Move preferences and observers into dedicated threadsafe module. r=dhylands 2015-08-18 07:42:12 -04:00
Ben Tian
a0a229d80d Bug 1192693 - [02] Remove bluetooth1 folder and rename webidl files, r=joliu, r=mrbkap
--HG--
rename : dom/webidl/BluetoothAdapter2.webidl => dom/webidl/BluetoothAdapter.webidl
rename : dom/webidl/BluetoothDevice2.webidl => dom/webidl/BluetoothDevice.webidl
rename : dom/webidl/BluetoothManager2.webidl => dom/webidl/BluetoothManager.webidl
2015-08-17 15:30:34 +08:00
Wes Kocher
83a7cbf448 Merge m-c to inbound, a=merge 2015-08-06 18:11:16 -07:00
Brian Birtles
774abfc8fe Bug 1180125 part 2 - Move AnimationCommon classes out of CSS namespace; r=dbaron
The long-term plan is to drop the mozilla::css namespace altogether. Before we
go to much further with refactoring code in AnimationCommon, we should drop
usage of the mozilla::css namespace. Specifically, this patch moves the
CommonAnimationManager and AnimValuesStyleRule classes to the mozilla namespace.
2015-07-29 10:57:39 +09:00
Kelly Davis
7f9de13c87 Bug 1185018 - Part 1 of 1 - Made speech recognition services language dependent and removed assumption of a single service. r=smaug 2015-08-02 13:43:00 +02:00
Sean Lin
1efa4382a3 Bug 1069230 - Presentation API implementation. Part 8 - Data transport channel. r=jdm 2015-04-22 16:01:38 +08:00
Carsten "Tomcat" Book
c86b8ab1b4 Backed out changeset a4fb4e4b1c8b (bug 1180125) 2015-07-29 17:32:19 +02:00
Brian Birtles
9b391b0177 Bug 1180125 part 2 - Move AnimationCommon classes out of CSS namespace; r=dbaron
The long-term plan is to drop the mozilla::css namespace altogether. Before we
go to much further with refactoring code in AnimationCommon, we should drop
usage of the mozilla::css namespace. Specifically, this patch moves the
CommonAnimationManager and AnimValuesStyleRule classes to the mozilla namespace.
2015-07-29 10:57:39 +09:00
Sean Lin
ffb77b7af4 Bug 1069230 - Presentation API implementation. Part 2 - Presentation service and listeners. r=smaug 2015-03-25 19:47:56 +08:00
Sean Lin
1da14adfbd Bug 1069230 - Presentation API implementation. Part 1 - WebIDL Bindings. r=smaug 2015-03-19 15:48:28 +08:00
Ehsan Akhgari
4355437852 Bug 1183925 - Part 2: Clean up the AudioChannelService shutdown; r=baku
Right now this function is called after the XPCOM component manager is
shut down, so it can never remove any observers.  It's better to do this
work in response to xpcom-shutdown while we still have a component
manager to be able to clean up after ourselves properly.
2015-07-15 17:47:28 -04:00
Ehsan Akhgari
65c24ac906 Bug 1183925 - Part 1: Clean up the SpeakerManagerService shutdown; r=baku 2015-07-15 17:47:08 -04:00
Ryan VanderMeulen
1ec1df2206 Backed out changeset 21a5c9152c3b (bug 1183925) for B2G debug mochitest crashes. 2015-07-15 11:29:50 -04:00
Ehsan Akhgari
892a26b362 Bug 1183925 - Clean up the AudioChannelService shutdown; r=baku
Right now this function is called after the XPCOM component manager is
shut down, so it can never remove any observers.  It's better to do this
work in response to xpcom-shutdown while we still have a component
manager to be able to clean up after ourselves properly.
2015-07-15 08:12:36 -04:00
Andrea Marchesini
db14826639 Bug 1113086 - AudioChannel policy in Browser API - patch 1 - BrowserElementAudioChannel, r=ehsan
--HG--
rename : dom/audiochannel/AudioChannelAgent.h => dom/browser-element/BrowserElementAudioChannel.h
rename : dom/audiochannel/tests/file_telephonyPolicy.html => dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel.html
rename : dom/audiochannel/tests/file_telephonyPolicy.html => dom/browser-element/mochitest/test_browserElement_oop_AudioChannel.html
rename : dom/audiochannel/AudioChannelCommon.h => dom/webidl/BrowserElementAudioChannel.webidl
2015-07-10 17:38:44 +01:00
Carsten "Tomcat" Book
c07e36b612 Backed out changeset bcfbdb934c37 (bug 1113086) for breaking cpp tests with timeouts in TestAudioChannelService.exe
--HG--
rename : dom/webidl/BrowserElementAudioChannel.webidl => dom/audiochannel/AudioChannelCommon.h
rename : dom/browser-element/mochitest/test_browserElement_oop_AudioChannel.html => dom/audiochannel/tests/file_telephonyPolicy.html
2015-07-11 14:14:58 +02:00
Andrea Marchesini
3050bc370c Bug 1113086 - AudioChannel policy in Browser API - patch 1 - BrowserElementAudioChannel, r=ehsan
--HG--
rename : dom/audiochannel/AudioChannelAgent.h => dom/browser-element/BrowserElementAudioChannel.h
rename : dom/audiochannel/tests/file_telephonyPolicy.html => dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel.html
rename : dom/audiochannel/tests/file_telephonyPolicy.html => dom/browser-element/mochitest/test_browserElement_oop_AudioChannel.html
rename : dom/audiochannel/AudioChannelCommon.h => dom/webidl/BrowserElementAudioChannel.webidl
2015-07-10 21:08:43 -04:00
Xidorn Quan
f23d866f51 Backed out 8 changesets (bug 1113086) for build bustage
Backed out changeset a20839dfd439 (bug 1113086)
Backed out changeset 675ea719b91c (bug 1113086)
Backed out changeset cfb34138bb9f (bug 1113086)
Backed out changeset b9525c60a737 (bug 1113086)
Backed out changeset 380859ae955b (bug 1113086)
Backed out changeset 5ec088f0892f (bug 1113086)
Backed out changeset caf57ae8cbce (bug 1113086)
Backed out changeset 0fc4dec6cd81 (bug 1113086)

--HG--
extra : histedit_source : d8dfd75d9dae36b7309ce78e3b4488faf57003da%2C48081711b7067191d8e4749fd3b572db59bc03f9
2015-07-11 10:55:59 +10:00
Andrea Marchesini
bbb0a11f31 Bug 1113086 - AudioChannel policy in Browser API - patch 1 - BrowserElementAudioChannel, r=ehsan
--HG--
rename : dom/browser-element/mochitest/test_browserElement_inproc_GetContentDimensions.html => dom/browser-element/mochitest/test_browserElement_inproc_AudioChannel.html
rename : dom/browser-element/mochitest/test_browserElement_oop_GetContentDimensions.html => dom/browser-element/mochitest/test_browserElement_oop_AudioChannel.html
2015-07-10 17:38:44 +01:00
Cameron McCormack
7c894d7982 Bug 77999 - Part 2: Add RuleProcessorCache. r=dbaron 2015-06-26 13:52:47 +10:00
Carsten "Tomcat" Book
56a152e92c merge mozilla-inbound to mozilla-central a=merge 2015-06-16 16:08:27 +02:00
Jocelyn Liu
0d4e05f63a Bug 1167064 - Patch1: Switch to bluetooth APIv2. r=shuang 2015-06-16 09:38:50 +08:00
Shawn Huang
434fcb6904 Backed out changesets 0832ffdd8144 for Bug 1167064 2015-06-15 19:05:03 +08:00
Jocelyn Liu
3ded2db982 Bug 1167064 - Patch1: Switch to bluetooth APIv2. r=shuang 2015-06-15 17:11:35 +08:00
Kelly Davis
03382cd121 Bug 1051148 - Part 1: Patch that introduces WebSpeech API implementation. r=smaug
--HG--
extra : rebase_source : 21627e11c429f5bf5f7373de804f3adfda431dbc
extra : histedit_source : a7f4210afb870d8ce7bc97d8608d0674473cc713
2015-06-09 22:49:00 -04:00
Chris Pearce
efc7a7830e Bug 1174055 - Load WMF DLLs in MFStartup(), never unload them. r=jya 2015-06-16 14:28:01 +12:00
Ehsan Akhgari
cbf85aceea Bug 1171486 - Avoid recursively obtaining the service worker manager service; r=nsm 2015-06-04 16:27:48 -04:00
Ryan VanderMeulen
0d430ff1b0 Backed out changesets b2fb4270e0a6 and 2a0493fb37db (bug 1051148) for introducing new rooting hazards.
CLOSED TREE IGNORE IDL

--HG--
extra : rebase_source : 97a096424b43fc4bed692182841843131fdcee13
extra : histedit_source : 4754300927dac90f0ae879e90896e36f1aa28b49
2015-06-03 13:14:59 -04:00
Kelly Davis
bf300061b2 Bug 1051148 - Part 1: Patch that introduces WebSpeech API implementation. r=smaug
IGNORE IDL

--HG--
extra : histedit_source : d9d8b673d22c90cfc0e9c58e8599a2b34167c913
2015-05-27 21:48:00 -04:00
Kelly Davis
ea77b93523 Bug 1051146 - Part 4: Introduce build system changes for the MOZ_WEBSPEECH_TEST_BACKEND flag. r=smaug, r=gps 2015-05-21 07:40:00 -04:00
Kelly Davis
966d7398dc Bug 1051146 - Part 3: Introduce build system changes for the new Pocketsphinx and Sphinxbase code. r=smaug, r=gps 2015-05-27 21:39:00 -04:00
Ben Turner
805bc94273 Bug 858680 - Part 2: Add idle notifications to QuotaClient, r=janv.
--HG--
extra : rebase_source : d4ec5e860b885ab01e4e1c19e6aed057b78e5aaa
2015-04-30 13:46:51 -07:00
Wes Kocher
a6c4705f9a Backed out changeset 0aaa67fc61e8 (bug 858680) 2015-05-21 16:44:42 -07:00
Kan-Ru Chen
3e9e269e92 Bug 1154231 - Part 1. Use LRU to manage remote layers. r=mattwoodrow 2015-05-22 07:08:20 +08:00
Ben Turner
b553d50f23 Bug 858680 - Part 2: Add idle notifications to QuotaClient, r=janv.
--HG--
extra : rebase_source : 6797f2d4fdaabef4e5d3b83fbacc09984f447866
2015-04-30 13:46:51 -07:00
Phil Ringnalda
a5df436c2e Backed out 2 changesets (bug 1154231) for M-oth crashes
CLOSED TREE

Backed out changeset 5e8145eff457 (bug 1154231)
Backed out changeset 951fb8ed6f25 (bug 1154231)
2015-05-15 20:29:15 -07:00
Kan-Ru Chen
10fec84bca Bug 1154231 - Part 2. Use LRU to manage remote layers. r=mattwoodrow 2015-05-16 08:43:39 +08:00